带有RabbitMQ和Eventmachine的Ruby SMPP,AMQP.stop之后的问题

时间:2011-03-27 20:48:46

标签: ruby rabbitmq eventmachine

我对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 个答案:

答案 0 :(得分:0)

AMQP.start做了它自己的EM魔术 - 这可能就是咬你的东西。

这是关于如何在EM运行中执行AMQP的an example(或者看起来如此)

答案 1 :(得分:0)

您可以尝试使用这个简单的库:Setting initial value of Django ModelChoiceField

除了两个应用程序之间的简单通信之外没有其他内容