Eventmachine::defer+ruby
我已经使用EventMachine很长一段时间了,我真的觉得它很棒,因为它让我知道我不必担心任何事情。但最近我发现了一个奇怪的问题,我就是不理解 这就是我要说的 我有一个像这样的Eventmachine循环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::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