# File lib/amqp/exchange.rb, line 311
    def publish(data, opts = {})
      @mq.callback {
        out = []

        out << Protocol::Basic::Publish.new({ :exchange => name,
                                              :routing_key => opts[:key] || @key }.merge(opts))

        data = data.to_s

        out << Protocol::Header.new(Protocol::Basic,
                                    data.bytesize, { opts[:content_type] || :content_type => "application/octet-stream",
                                                   :delivery_mode => (opts[:persistent] ? 2 : 1),
                                                   :priority => 0 }.merge(opts))

        out << Frame::Body.new(data)

        @mq.send *out
      }
      self
    end