1

我对 rabbitmq 有一个小问题,我不明白。我在用:

  • 红宝石版本 1.8.7
  • AMQP GEM 版本 0.7.0
  • RabbitMQ v2.3.1
  • 红宝石-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 似乎做了一些事情并且它没有给我一个错误,但订阅似乎不起作用。也没有错误。只有在停止进程并重新启动后,它才会再次订阅并处理消息。我不明白为什么

4

2 回答 2

0

AMQP.start 有它自己的 EM 魔法——这可能是你的问题。

这是一个关于如何在 EM 运行中执行 AMQP 的示例(或者看起来如此)

于 2011-05-12T13:57:38.633 回答
0

你可以试试这个简单的库:https ://github.com/sck-v/communications

除了两个应用程序之间的简单通信外,什么都没有

于 2015-07-31T04:38:12.727 回答