0

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

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

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

  1. 我可以使用 PUB/SUB 功能。让发布者为工作结果创建唯一身份,并在重定向 URI 中将这些身份返回给 REST 客户端。
  2. 本质上是一样的,但不是 PUB/SUB 而是使用 RPUSH/BLPOP。

我不确定#1的优势是什么。例如,如果我有一个名为 LongMathOperation 的任务,似乎我可以简单地为此列出一个列表。列表元素是 JSON 对象,具有数学运算参数以及由 REST 服务器生成的用于放置结果的 UUID。然后所有工作人员 dynos 将只有阻塞 BLPOP 调用,第一个将获得工作,处理它,并使用 UUID 的键将结果放入 REDIS。

说得通?所以我的问题是“为什么使用 PUB/SUB 会比这更好?” PUB/SUB 在这里带来了什么我想念的东西?

谢谢!

4

1 回答 1

0

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

于 2013-06-13T19:39:45.080 回答