具有结果的异步工作队列的正确方法是什么?

时间:2013-06-13 16:37:56

标签: heroku redis jedis

我在heroku上有一个REST服务器。它将为REST服务提供N-dynos,为工作人员提供N-dynos。

基本上,我有一些长时间运行的休息请求。当这些进入时,我想将它们委托给其中一个worker,并给客户端一个重定向来轮询操作并最终返回操作的结果。

我将使用RedisToGo的JEDIS / REDIS进行此操作。据我所知,有两种方法可以做到这一点。

  1. 我可以使用PUB / SUB功能。让发布者为工作结果创建唯一标识,并将这些标识重定向到REST客户端。
  2. 基本上是相同的东西,而不是PUB / SUB使用RPUSH / BLPOP。
  3. 我不确定#1的优势是什么。例如,如果我有一个名为LongMathOperation的任务,我似乎可以简单地为此列出一个列表。列表元素是具有数学运算参数的JSON对象,以及由REST服务器生成的UUID,用于放置结果的位置。然后所有工作人员dynos将只阻止BLPOP调用,第一个将获得作业,处理它,并使用UUID的键将结果放入REDIS。

    有意义吗?所以我的问题是“为什么使用PUB / SUB比这更好?” PUB / SUB在这里带来了什么,我失踪了?

    谢谢!

1 个答案:

答案 0 :(得分:0)

我也会使用列表,因为pubsub消息不是持久的。如果您没有订阅者,则消息将丢失。换句话说,如果由于某种原因你没有任何工作人员听,那么客户端将无法得到正确的服务。另一方面,列表是持久的。但是出于同样的原因,pubsub显然没有列表那么多的内存:没有什么可以存储。