Class Bunny::Subscription09
In: lib/bunny/subscription09.rb
Parent: Bunny::Consumer

Asks the server to start a "consumer", which is a transient request for messages from a specific queue. Consumers last as long as the channel they were created on, or until the client cancels them with an @unsubscribe@. Every time a message reaches the queue it is passed to the @blk@ for processing. If error occurs, {Bunny::ProtocolError} is raised.

@option opts [String] :consumer_tag

  Specifies the identifier for the consumer. The consumer tag is
  local to a connection, so two clients can use the same consumer tags.
  If this option is not specified a server generated name is used.

@option opts [Boolean] :ack (false)

  If set to @false@, the server does not expect an acknowledgement message
  from the client. If set to @true, the server expects an acknowledgement
  message from the client and will re-queue the message if it does not
  receive one within a time specified by the server.

@option opts [Boolean] :exclusive (false)

  Request exclusive consumer access, meaning only this consumer can access the queue.

@option opts [Boolean] :nowait (false)

  Ignored by Bunny, always @false@.

@option opts [Numeric] :timeout

  The subscribe loop will continue to wait for messages
  until terminated (Ctrl-C or kill command) or this timeout interval is reached.

@option opts [Integer] :message_max

  When the required number of messages is processed subscribe loop is exited.

h2. Operation

Passes a hash of message information to the block, if one has been supplied. The hash contains :header, :payload and :delivery_details. The structure of the data is as follows -

:header has instance variables -

  @klass
  @size
  @weight
  @properties is a hash containing -
    :content_type
    :delivery_mode
    :priority

:payload contains the message contents

:delivery details is a hash containing -

  :consumer_tag
  :delivery_tag
  :redelivered
  :exchange
  :routing_key

If the :timeout option is specified then the subscription will automatically cease if the given number of seconds passes with no message arriving.

@example

  my_queue.subscribe(timeout: 5) { |msg| puts msg[:payload] }
  my_queue.subscribe(message_max: 10, ack: true) { |msg| puts msg[:payload] }

Methods

Public Instance methods

[Validate]