我有2项服务。他们俩都需要订阅相同的频道。
这两项服务是负载平衡的。每项服务都在多台服务器上运行。
那么我怎么能确定每个服务的只有一个实例消耗该频道的消息。
Redis是否支持此功能?
由于
答案 0 :(得分:29)
Pubsub无法正常工作 - 消息将发送给所有已连接的订阅客户端。但是,您可以对其进行设置,以便通道是对列表更新的通知。这样所有客户端都会收到消息,但只有一个客户端可以使用LPOP从列表中获取该项目。
答案 1 :(得分:29)
另一种方法是使用服务实例中的B*POP
。如果有许多客户端针对列表运行B*POP
,那么每当您LPUSH
时,其中一个客户端将获取数据,但只有一个。
答案 2 :(得分:3)
您需要将 Redis Streams 与 XREADGROUP 一起使用,这是 Redis 的一项新功能。