Class: Bisques::MultiQueueListener

Inherits:
Object
  • Object
show all
Defined in:
lib/bisques/queue_listener.rb

Overview

Listen for messages on several queues at the same time. The interface for objects of this class is identical to that of QueueListener.

Examples:


queue_1 = bisques.find_or_create_queue("queue one")
queue_2 = bisques.find_or_create_queue("queue two")
listener = MultiQueueListener.new(queue_1, queue_2)
listener.listen do |message|
  puts "Queue #{message.queue.name}, message #{message.object}"
  message.delete
end
while true; sleep 1; end # Process messages forever

Instance Method Summary collapse

Constructor Details

#initialize(*queues) ⇒ MultiQueueListener

Returns a new instance of MultiQueueListener.

Parameters:



69
70
71
72
# File 'lib/bisques/queue_listener.rb', line 69

def initialize(*queues)
  @queues = queues
  @listeners = []
end

Instance Method Details

#listen {|Message| ... } ⇒ Object

Note:

Note that the block you give to this method is executed in a new thread.

Listen for messages. This is asynchronous and returns immediately.

Examples:


queue = bisques.find_or_create_queue("my queue")
listener = QueuedListener.new(queue)
listener.listen do |message|
  puts "Received #{message.object}"
  message.delete
end

while true; sleep 1; end # Process messages forever

Yields:



80
81
82
83
84
85
86
87
88
89
# File 'lib/bisques/queue_listener.rb', line 80

def listen(&block)
  return if @listeners.any?
  @listeners = @queues.map do |queue|
    QueueListener.new(queue)
  end

  @listeners.each do |listener|
    listener.listen(&block)
  end
end

#listening?Boolean

Returns true while the listener is active.

Returns:

  • (Boolean)

    returns true while the listener is active.



75
76
77
# File 'lib/bisques/queue_listener.rb', line 75

def listening?
  @listeners.any?
end

#stopObject

Stop listening for messages.



92
93
94
95
# File 'lib/bisques/queue_listener.rb', line 92

def stop
  @listeners.each(&:stop)
  @listeners = []
end