# File lib/bunny/queue09.rb, line 168
    def pop(opts = {}, &blk)
      opts = {
        :queue => name,
        :consumer_tag => name,
        :no_ack => !opts[:ack],
        :nowait => true,
        :deprecated_ticket => 0
      }.merge(opts)

      client.send_frame(Qrack::Protocol09::Basic::Get.new(opts))

      method = client.next_method

      if method.is_a?(Qrack::Protocol09::Basic::GetEmpty) then
        queue_empty = true
      elsif !method.is_a?(Qrack::Protocol09::Basic::GetOk)
        raise Bunny::ProtocolError, "Error getting message from queue #{name}"
      end

      if !queue_empty
        # get delivery tag to use for acknowledge
        self.delivery_tag = method.delivery_tag if opts[:ack]

        header = client.next_payload

        # If maximum frame size is smaller than message payload body then message
        # will have a message header and several message bodies
        msg = ''
        while msg.length < header.size
          msg << client.next_payload
        end

        msg_hash = {:header => header, :payload => msg, :delivery_details => method.arguments}

      else
        msg_hash = {:header => nil, :payload => :queue_empty, :delivery_details => nil}
      end

      # Pass message hash to block or return message hash
      blk ? blk.call(msg_hash) : msg_hash
    end