我们遇到了Amazon SWF的新Ruby-Flow包装器的问题。
问题是Workflow和Activity工作人员(每小时几次)无法正确地与SWF服务器通信。这表现在各方面:
对于工人崩溃(任何一种),我们看到以下内容:
andy@Andy-MBP:Crucible $RAILS_ENV=development rake crucible:swf:ingress_wf_start
rake aborted!
execution expired
/Users/andy/.rvm/gems/ruby-1.9.3-p448@rails3/gems/aws-sdk-1.11.1/lib/aws/core/http/connection_pool.rb:301:in `start_session'
/Users/andy/.rvm/gems/ruby-1.9.3-p448@rails3/gems/aws-sdk-1.11.1/lib/aws/core/http/connection_pool.rb:125:in `session_for'
/Users/andy/.rvm/gems/ruby-1.9.3-p448@rails3/gems/aws-sdk-1.11.1/lib/aws/core/http/net_http_handler.rb:52:in `handle'
/Users/andy/.rvm/gems/ruby-1.9.3-p448@rails3/gems/aws-sdk-1.11.1/lib/aws/core/client.rb:238:in `block in make_sync_request'
如果失败涉及无法更新服务器任务完成,则回溯非常相似。
这似乎不是SWF问题本身(也就是说,它不是活动执行的超时);这是一个Ruby HTTP通信问题。 SO上有类似的问题与Twitter API进行通信。
同样,这不是SWF超时到期的问题;工作流的超时为一天,每个活动的超时时间为一小时。失败发生在该边界内。
不幸的是,它通常起作用,我通常可以启动工作流程执行,我只是经常得到这种错误,以至于我们无法完成除了琐碎的工作以外的任何事情。错误是随机的,故障排除非常困难。
我们已在不同的机器和不同的网络上重现了这一点。我们仍然在开发中尝试SWF,因此没有失败的工作人员位于EC2实例上。
是否存在我应该调查的根本原因? 是否有允许我重试这些通信的模式或设置?
答案 0 :(得分:0)
我已经与维护ruby-flow库的亚马逊人讨论了这个问题。可以找到该讨论here。
问题是我们的计算机无法打开与AWS服务器的连接。将重试次数设置得非常高,这已经解决了我们的发展目的。
根本原因似乎是Mac OSX中的一些东西。我们将其用于开发,并在几台不同的机器上运行此问题(运行10.7和10.8)。
新的Linux机器没有出现问题。