Redis pub sub适用于多个生产者和多个消费者

时间:2016-08-31 02:43:49

标签: design-patterns redis publish-subscribe google-cloud-pubsub

假设有N个生产者和M个用户订阅了这些N个生产者。这里N生产者产生N种不同类型的消息,例如

producer1 produces  messageType1, 
producer2 produces  messageType2,
producer3 produces  messageType3,
.
.
. 
producerN produces  messageTypeN. 

M用户可以订阅这些消息。一个用户可以订阅多种类型的消息。 E.g。

user1 consumes (messageType1, messageType2, messageType10)
user2 consumes (messageType14, messageType5)
.
.
userM consumes (messageType21, messageType22, messageType23, .... messageTypeN)

用户可能会使用相同或不同的消息类型。我的问题是如何设计这个场景。它看起来像pub子模式。对于这种情况,我是否必须在redis中为每个用户创建频道。如果是,则可以创建的redis通道数量有限制(10K)。在那种情况下如何处理数百万用户?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在发布/订阅方案中,您应该为每个制作人创建频道。每个用户订阅相应生产者的渠道。

  

用户端

// user1
subscribe producer1 producer2
// user2
subscribe producer2
  

制片人

// producer1
publish producer1 message1
// producer2
publish producer2 message2

限制不是您可以创建的频道数,而是客户端连接数。您不能同时有数百万用户连接到单个Redis实例。

  

可能的解决方案

为了实现这一点,您必须创建多个Redis实例,并将用户分成分片。每个Redis实例都会创建一个完整的生成器列表,并仅处理来自一个用户分片的连接。

生成消息时,您可以在每个Redis实例的相应通道上发布消息,以便订阅该频道的用户可以接收该消息。