내가 원하는 것은 매 시간마다 서버의 RMQ 교환에 메시지 묶음을 게시하는 반복 프로세스를 시작하는 것입니다.Ruby에서 스케줄러와 AMQP가 제대로 작동하도록하려면 어떻게해야합니까?
클래스가 있는데, RMQProcess
으로 전화를 걸어 AMQP 이벤트 루프를 시작합니다. 내가이 일을 루퍼스 - 스케줄러를 사용할 수 있다고 생각 :
scheduler.every '10s', :times=>6 do
process = RMQProcess.new
process.start
end
scheduler.join
이 작동을 ... 때마다 제외 루프를 통해, (2에서 4 ... 등 6까지) AMQP 채널 증가합니다. 이것은 채널이 제대로 닫히지 않아 문제가 발생할 수 있음을 의미합니다.
제 질문을 요약하면, 이런 종류의 일을하는 적절한 (또는 적어도 적절한) 방법은 무엇입니까? AMQP 프로세스가 스케줄러 프로세스에 들어가기 전에 해고 당해야합니까, 아니면 올바르게하고 있습니까? AMQP 이벤트 루프 내에서 자체 스케줄링 로직을 롤백해야합니까? 그것은 내 두려움입니다. 왜냐하면 더 좋은 방법이 있어야 할 것처럼 보입니다. 어떤 충고라도 받아 들였다.
def start
begin
puts @rmq_params
AMQP.start(@rmq_params) do
|connection|
connection.on_error do
|ch, connection_close|
puts "#{connection_close.reply_text}"
end
connection.on_tcp_connection_loss do
|conn, settings|
puts "[network failure] Trying to reconnect..."
conn.reconnect(false, 2)
end
channel = AMQP::Channel.new(connection, :auto_recovery => true)
puts "Channel ID = #{channel.id}"
exchange = channel.direct(@exchangeName,:durable => true)
exchange.publish(Lorem.words)
EM.add_timer(@duration) do
connection.close do
EM.stop_event_loop
end
end
Signal.trap("INT") do
connection.close do
EM.stop_event_loop
end
end
end
rescue Exception => e
puts "#{e.message} #{e.backtrace.join("\n")}"
end
end