Redis Pub / Sub上的竞争消费者是否受到支持?

时间:2011-08-25 19:47:35

标签: redis message-queue publish-subscribe

我有2项服务。他们俩都需要订阅相同的频道。

这两项服务是负载平衡的。每项服务都在多台服务器上运行。

那么我怎么能确定每个服务的只有一个实例消耗该频道的消息。

Redis是否支持此功能?

由于

3 个答案:

答案 0 :(得分:29)

Pubsub无法正常工作 - 消息将发送给所有已连接的订阅客户端。但是,您可以对其进行设置,以便通道是对列表更新的通知。这样所有客户端都会收到消息,但只有一个客户端可以使用LPOP从列表中获取该项目。

答案 1 :(得分:29)

另一种方法是使用服务实例中的B*POP。如果有许多客户端针对列表运行B*POP,那么每当您LPUSH时,其中一个客户端将获取数据,但只有一个。

答案 2 :(得分:3)

您需要将 Redis Streams 与 XREADGROUP 一起使用,这是 Redis 的一项新功能。

https://redis.io/topics/streams-intro