# File lib/bunny/exchange09.rb, line 127
    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::Protocol09::Basic::Publish.new({ :exchange => name,
                                                     :routing_key => routing_key,
                                                     :mandatory => mandatory,
                                                     :immediate => immediate,
                                                     :deprecated_ticket => 0 })
      data = data.to_s
      out << Qrack::Protocol09::Header.new(
                                           Qrack::Protocol09::Basic,
                                           data.bytesize, {
                                             :content_type  => content_type,
                                             :delivery_mode => delivery_mode,
                                             :priority      => 0
                                           }.merge(opts)
                                           )
      out << Qrack::Transport09::Body.new(data)

      client.send_frame(*out)
    end