加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:13:00 所属栏目:百科 来源:网络整理
导读:我有一个使用delayed_job的rails应用程序.我需要我的工作相互沟通,例如“任务5完成”或“这是任务5需要处理的事项列表”. 现在我有一个特殊的表,我总是访问事务中的表.它工作正常.我想为它构建一个更干净的api / dsl,但首先要检查是否已有解决方案.奇怪的是,
我有一个使用delayed_job的rails应用程序.我需要我的工作相互沟通,例如“任务5完成”或“这是任务5需要处理的事项列表”.

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

我错过了什么吗?

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

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

解决方法

我使用 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.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读