【问题标题】:Eventmachine::defer + rubyEventmachine::defer + ruby
【发布时间】:2011-04-29 00:48:32
【问题描述】:

我使用 EventMachine 已经有一段时间了,我真的觉得它很棒,因为它管理向我展示了我不必担心任何事情。但最近我发现了这个奇怪的问题,我只是没能解决了解

这里只是告诉你什么

我有 Eventmachine 循环,看起来像这样

 EventMachine::run {     
    EventMachine::add_periodic_timer(10) do
         EventMachine::defer(@operation_block,@callback_block)
    end
 } 

这里我的操作块看起来像(下面的代码使用 amqp 使用胡萝卜 gem)

@operation_block = Proc.new {
              begin   
              puts "Initiating the queue"
              @carrot ||= Carrot.new(:host => localhost)
              @queue ||= @carrot.queue("my_queue")
              puts "The Queue is Poping the message"

              if @queue.pop
                  [MY LOGIC HERE]
                  $input_to_callback = "SUCCESS" ## IF LOGIC GET EVALUATED WITHOUT ERROR ELSE WILL SET TO FAIL 
                else
                  $input_to_callback = "NOTHING TO PROCESSES"      
                end  
             rescue 
                puts e
                retry!   
             end    
             $input_to_callback 

          }

这里我的回调块看起来像

@callback_block = Proc.new {|operation_block_output|
   if operation_block_output == "SUCCESS"
      puts "YAHOOOOOOOOO SUCCESS"
   elsif operation_block_output == "NOTHING TO PROCESSES"
      puts "BOO Nothing to processes"
   else  
      puts "FAIL ALARM"
   end      
 }

现在麻烦来了 代码虽然按应有的方式工作,直到发生不好的事情 这就是我的意思

现在假设我运行上面的代码

我有一个队列集名称“my_queue”,如果它不存在,它会创建一个队列最初是空的

这里是我在控制台上得到的输出

启动队列

队列正在弹出消息

BOO 没有任何处理

当我根据消息在控制台中构建输出更改时

现在麻烦了

如果我暂时关闭我的 AMQP 服务器,这里的输出(显示我的意思)

启动队列

Broken Pipe => 发生的错误 在操作块中开始救援块

现在启动 AMQP 服务器

代码似乎永远不会从当前出现错误的行向前移动 这意味着我似乎从来没有打印过这条线

队列正在弹出消息

不仅发生了当前的重试延迟,而且还发生了在 Timer 时间刚刚过去之后启动的新延迟操作块 即后续调用操作块的方法 似乎永远不会继续前进并进行处理并始终打印以下内容 只输出

Initiating the queue

似乎永远不会前进(卡住)并进行处理,即从队列中获取消息并相应地进行处理,并且所有其他内容(因为 AMQP 服务器现在正在运行)

谢谢

【问题讨论】:

    标签: ruby eventmachine


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      相关资源
      最近更新 更多