Ruby SMPP с RabbitMQ и Eventmachine, проблемы после AMQP.stop - PullRequest
1 голос
/ 28 марта 2011

У меня есть небольшая проблема с rabbitmq, которую я не понимаю.Я использую:

  • Версия Ruby 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 ]

0 голосов
/ 31 июля 2015

Вы можете попробовать эту простую библиотеку: https://github.com/sck-v/communications

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

0 голосов
/ 12 мая 2011

AMQP.start делает свою собственную магию EM - это может быть то, что вас кусает.

Вот пример о том, как выполнить AMQP внутри прогона EM (или так кажется)

...