Ruby SMPP с RabbitMQ и Eventmachine, проблемы после AMQP.stop
У меня есть небольшая проблема с rabbitmq, которую я не понимаю. Я использую:
- Ruby Version 1.8.7
- AMQP GEM Версия 0.7.0
- RabbitMQ v2.3.1
- ruby-smpp v0.4.0
Мой код выглядит так:
loop do
AMQP.start do
EventMachine::run do
@@tx = EventMachine::connect(
config[:host],
config[:port],
Smpp::Transceiver,
config,
self # delegate that will receive callbacks on MOs and DRs and other events
)
EM.add_timer(10) do
puts "AMQP New"
amq = MQ.new
amq.queue("#{provider}").subscribe(:ack => true) do |header, msg|
puts "Provider #{provider} consumer #{Process.pid} processed #{msg}"
header.ack
end
end
EM.add_timer(30) {EventMachine::stop_event_loop}
end
end
AMQP.stop
puts "#{config[:host]} Disconnected. Reconnecting in 35 seconds.."
sleep 35
end
Я добавил эту строку для тестирования. EM.add_timer(30) {EventMachine::stop_event_loop}
так через 30 сек. Я прекращаю цикл обработки событий, он спит 35 секунд, а все перезапускается. Проблема в том, что amq = MQ.new, кажется, что-то делает, и это не дает мне ошибку, но подписка, кажется, не работает. Также нет ошибок. Только после остановки процесса и повторного запуска он снова подписывается и обрабатывает сообщения. Я не понимаю почему
2 ответа
AMQP.start делает свою собственную магию EM - это может быть тем, что кусает вас.
Вот пример того, как выполнить AMQP внутри прогона EM (или, кажется, так)
Вы можете попробовать эту простую библиотеку: https://github.com/sck-v/communications
Ничего, кроме простой связи между двумя приложениями