首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >事件机::defer+ ruby

事件机::defer+ ruby
EN

Stack Overflow用户
提问于 2010-10-22 07:50:21
回答 1查看 1.5K关注 0票数 0

我使用EventMachine很长一段时间了,我发现它真的很棒,因为它让我更多地看到,最近我不必担心anything.But,我只是发现了一个奇怪的问题,我只是不明白。

在这里,我想说的是

我有一个像这样的Eventmachine循环

代码语言:javascript
运行
复制
 EventMachine::run {     
    EventMachine::add_periodic_timer(10) do
         EventMachine::defer(@operation_block,@callback_block)
    end
 } 

在这里,我的操作块看起来像(下面的代码使用了使用胡萝卜宝石的amqp )

@operation_block = Proc.new { begin放置“初始化队列”@胡萝卜||= Carrot.new(:host => localhost) @queue ||= @carrot.queue("my_queue")放置“队列正在弹出消息”,如果@queue.pop在这里的逻辑$input_to_callback =“成功”## --如果逻辑得到无错误的评估--否则,$input_to_callback = "NOTHING TO PROCESSES“将被设置为FAIL,$input_to_callback=”NOTHING TO PROCESSES“,结束拯救,进行重试!end $input_to_callback }

在这里,我的回调块看起来就像

代码语言:javascript
运行
复制
@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“,如果它不存在,它会创建一个队列,队列最初是空的

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

启动队列的

队列正在弹出消息Initiating到进程

在我的消息构建时,控制台中的输出更改相应地基于

现在麻烦

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

启动队列的

作业区begin救援块中遇到的断管=>误差

现在启动AMQP服务器

代码似乎从未从当前出现错误的行向前移动,这意味着我从未打印过这条线。

队列正在弹出消息。

不仅发生了重试的当前延迟操作,而且在计时器时间刚刚过去之后启动的新的延迟操作块(也就是对操作块的后续调用)似乎从未向前移动并进行处理,并且始终只打印以下输出

代码语言:javascript
运行
复制
Initiating the queue

只是永远不要前进(卡住),做它意味着的处理,即从队列中获取消息,相应地进行处理和所有其他东西(就像AMQP服务器现在运行的那样)。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-21 06:55:58

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3994844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档