4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/esp-commons/libraries/subscriber.rb', line 4
def start
AMQP.start(Settings['amqp.url']) do |connection|
logger.debug "Subscribers runned in #{Rails.env} environment"
subscribers.each do |subscriber|
channel = AMQP::Channel.new(connection)
channel.prefetch(1)
topic = routing_prefix(subscriber)
exchange = channel.topic(topic)
queue = channel.queue(topic, :durable => true)
queue.bind(exchange, :routing_key => "*").subscribe(:ack => true) do |, message|
method = .routing_key
message = JSON.parse(message)
logger.debug "#{subscriber.class} receive #{method}: #{message}"
if subscriber.respond_to?(method)
begin
subscriber.send(method, *message)
logger.debug "#{subscriber.class} successfully executed #{method}"
rescue => e
logger.warn "#{subscriber.class} error while executing #{method} - #{e.message}"
end
else
logger.warn "#{subscriber.class} cann't execute #{method} due #{subscriber.class} not respond to #{method}"
end
.ack
end
logger.info "#{subscriber.class} listen #{queue.name}"
end
end
end
|