# File lib/bunny/exchange08.rb, line 140
    def publish(data, opts = {})
      opts = opts.dup
      out = []

      # Set up options
      routing_key = opts.delete(:key) || key
      mandatory = opts.delete(:mandatory)
      immediate = opts.delete(:immediate)
      delivery_mode = opts.delete(:persistent) ? 2 : 1
      content_type = opts.delete(:content_type) || 'application/octet-stream'

      out << Qrack::Protocol::Basic::Publish.new({ :exchange => name,
                                                   :routing_key => routing_key,
                                                   :mandatory => mandatory,
                                                   :immediate => immediate })
      data = data.to_s
      out << Qrack::Protocol::Header.new(
        Qrack::Protocol::Basic,
        data.bytesize, {
          :content_type  => content_type,
          :delivery_mode => delivery_mode,
          :priority      => 0
        }.merge(opts)
      )
      out << Qrack::Transport::Body.new(data)

      client.send_frame(*out)
    end