ruby-on-rails – ruby​​中有哪些可用的消息解决方案用于进程间通信?

ruby-on-rails – ruby​​中有哪些可用的消息解决方案用于进程间通信?,第1张

概述我有一个使用delayed_job的rails应用程序.我需要我的工作相互沟通,例如“任务5完成”或“这是任务5需要处理的事项列表”. 现在我有一个特殊的表,我总是访问事务中的表.它工作正常.我想为它构建一个更干净的api / dsl,但首先要检查是否已有解决方案.奇怪的是,我没有发现任何一件事,我要么谷歌搜索完全错误,要么任务如此简单(在事务中设置和获取值),没有人已经抽象出来了. 我错过了什么 我有一个使用delayed_job的rails应用程序.我需要我的工作相互沟通,例如“任务5完成”或“这是任务5需要处理的事项列表”.

现在我有一个特殊的表,我总是访问事务中的表.它工作正常.我想为它构建一个更干净的API / dsl,但首先要检查是否已有解决方案.奇怪的是,我没有发现任何一件事,我要么谷歌搜索完全错误,要么任务如此简单(在事务中设置和获取值),没有人已经抽象出来了.

我错过了什么吗?

澄清:我不是在寻找一个新的排队系统,我正在寻找一种方法来让后台任务相互沟通.基本上只是安全地共享变量.以下框架是否提供此功能?延迟工作没有,这是一种耻辱.

用例:“并行完成这5项任务,然后当它们全部完成时,完成这1项最终任务.”因此,5个任务中的每个任务都会检查它是否是最后一个,如果是,它将触发最终任务.

@R_403_6120@ 我使用 resque.还有很多 plugins,这应该使进程间通信更容易.

使用redis还有另一个优点:您可以使用pub-sub通道进行工作人员/服务之间的通信.

另一种方法(但未经我测试):http://www.zeromq.org/,也有ruby bindings.如果你想测试新的东西,那么试试zeromq.

更新

澄清/解释/扩展我的评论:

为什么我应该从DelayedJobs切换到Resque是我提到的优势,我在一个系统中有队列和消息,因为Redis提供了这个.

进一步来源:

> https://github.com/blog/542-introducing-resque
> https://github.com/defunkt/resque#readme

如果我不得不继续使用DJ,我会使用redis或zeromq / 0mq扩展工作类(这里仅为示例),以便在我的后续作业中获取消息.

我不会尝试使用ActiveRecord / MysqL进行消息传递(实际上甚至不排队!)因为这个数据库不是这个用例的最佳性能系统,特别是如果应用程序在短时间内有太多的后台工作人员和庞大的队列和无数的消息交换.

如果它是一个拥有较少工人的小应用程序,你也可以通过数据库实现一个简单的消息传递,但在这里我更喜欢memcache;消息是短生存数据块,只能在内存中处理.

共享变量永远不会是一个好的解决方案.想想您的应用程序和工作人员可以使用的多台计算机.如何确保它们之间的保存变量传输?

好吧,有人可以提到DRb(分布式ruby),但它似乎不再使用了. (到目前为止从未见过现实世界的例子)

如果您想玩DRb,请阅读this short introduction.

我的个人喜好订单:消息(真实)>数据库驱动的消息传递>变量共享

总结

以上是内存溢出为你收集整理的ruby-on-rails – ruby​​中有哪些可用的消息解决方案用于进程间通信?全部内容,希望文章能够帮你解决ruby-on-rails – ruby​​中有哪些可用的消息解决方案用于进程间通信?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293006.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存