Class: Bunny::Subscription

Inherits:
Qrack::Subscription show all
Defined in:
lib/ext/bunny-0.6.0/lib/bunny/subscription08.rb

Overview

DESCRIPTION:

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.

OPTIONS:

  • :consumer_tag => '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.

  • :ack => false (default) or true - 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.

  • :exclusive => true or false (default) - Request exclusive consumer access, meaning only this consumer can access the queue.

  • :nowait => true or false (default) - Ignored by Bunny, always false.

  • <tt>:timeout => number of seconds - The subscribe loop will continue to wait for messages until terminated (Ctrl-C or kill command) or this timeout interval is reached.

  • :message_max => max number messages to process - When the required number of messages is processed subscribe loop is exited.

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 Qrack::ClientTimeout is raised if method times out waiting to receive the next message from the queue.

EXAMPLES

my_queue.subscribe(:timeout => 5) {|msg| puts msg}

my_queue.subscribe(:message_max => 10, :ack => true) {|msg| puts msg}

Instance Attribute Summary

Attributes inherited from Qrack::Subscription

#ack, #client, #consumer_tag, #delivery_tag, #exclusive, #message_count, #message_max, #queue, #timeout

Instance Method Summary collapse

Methods inherited from Qrack::Subscription

#initialize, #start

Constructor Details

This class inherits a constructor from Qrack::Subscription

Instance Method Details

#setup_consumerObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/ext/bunny-0.6.0/lib/bunny/subscription08.rb', line 65

def setup_consumer
	client.send_frame(
		Qrack::Protocol::Basic::Consume.new({ :queue => queue.name,
																			 		:consumer_tag => consumer_tag,
																			 		:no_ack => !ack,
																					:exclusive => exclusive,
																			 		:nowait => false }.merge(@opts))
										)

	method = client.next_method
	
	client.check_response(method,	Qrack::Protocol::Basic::ConsumeOk,
		"Error subscribing to queue #{queue.name}")

	@consumer_tag = method.consumer_tag

end