【问题标题】:Redis pub sub for multiple producers and multiple consumers用于多个生产者和多个消费者的 Redis pub sub
【发布时间】:2016-08-31 02:43:49
【问题描述】:

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

producer1 产生 messageType1, producer2 产生 messageType2, producer3 产生 messageType3, . . . producerN 产生 messageTypeN。

M 用户可以订阅这些消息。一个用户可以订阅多种类型的消息。例如

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

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

【问题讨论】:

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


    【解决方案1】:

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

    用户端

    // user1
    subscribe producer1 producer2
    // user2
    subscribe producer2
    

    制作方

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

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

    一个可能的解决方案

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

    在生产消息时,可以将消息发布到每个Redis实例对应的频道上,以便订阅频道的用户能够收到消息。

    【讨论】:

    • 感谢完美的解决方案:)
    猜你喜欢
    • 2021-07-09
    • 2019-06-07
    • 1970-01-01
    • 2016-09-11
    • 2015-03-27
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多