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

Ничего, кроме простой связи между двумя приложениями

Другие вопросы по тегам