Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eventmachine::defer+ruby_Ruby_Eventmachine - Fatal编程技术网

Eventmachine::defer+ruby

Eventmachine::defer+ruby,ruby,eventmachine,Ruby,Eventmachine,我已经使用EventMachine很长一段时间了,我真的觉得它很棒,因为它让我知道我不必担心任何事情。但最近我发现了一个奇怪的问题,我就是不理解 这就是我要说的 我有一个像这样的Eventmachine循环 EventMachine::run { EventMachine::add_periodic_timer(10) do EventMachine::defer(@operation_block,@callback_block) end }

我已经使用EventMachine很长一段时间了,我真的觉得它很棒,因为它让我知道我不必担心任何事情。但最近我发现了一个奇怪的问题,我就是不理解

这就是我要说的

我有一个像这样的Eventmachine循环

 EventMachine::run {     
    EventMachine::add_periodic_timer(10) do
         EventMachine::defer(@operation_block,@callback_block)
    end
 } 
这里我的操作块看起来像下面的代码使用amqp使用胡萝卜宝石

这里我的回调块看起来像

@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,如果它不存在,它将创建一个队列。队列最初为空

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

启动队列

队列正在弹出消息

不向进程发出任何嘘声

当我构建消息时,控制台中的输出根据

现在麻烦来了

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

启动队列

断开的管道=>捕获到的错误 在操作区开始救援区

现在启动AMQP服务器

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

队列正在弹出消息

不仅是重试发生的当前延迟,还包括在计时器时间刚刚过去后启动的新延迟操作块 i、 e表示随后调用操作块 似乎永远不会向前移动并进行处理,始终打印以下内容 仅输出

Initiating the queue
只是好像从来没有移动过一个被卡住的头,做它想要做的处理,即从队列中获取消息,做相应的处理和所有其他事情,因为AMQP服务器现在正在运行


谢谢

阿曼·古普塔回答了上述问题

Initiating the queue