【问题标题】:Handle subscriber server offline using redis pubsub?使用redis pubsub离线处理订阅服务器?
【发布时间】:2016-03-13 03:45:45
【问题描述】:

我目前正在创建一个水平可扩展的 socket.io 服务器,如下所示:

                 LoadBalancer (nginx)

      Proxy1      Proxy2      Proxy3      Proxy{N}

 BackEnd1   BackEnd2   BackEnd3   BackEnd4   BackEnd{N}

代理使用粘性会话 + 集群,每个都有一个在核心上运行的 socket.io 服务器并由 nginx 代理进行负载平衡。

现在我的问题是,这些后端节点使用 redis pubsub 与通过传输(websockets)处理所有通信的代理进行通信。

当代理向后端服务器发送请求时,它会知道请求它的用户以及用户所在的代理。我担心的是,当代理服务器出于某种原因脱机时,我的后端节点上的任何待处理请求在它重新联机时都将无法到达用户,因为在服务器脱机时发送的消息。我可以实施什么来规避这个问题,并且在任何代理服务器离线时基本上让消息排队,然后在它重新打开时传递?

【问题讨论】:

  • 您找到了可接受的解决方案吗?

标签: node.js redis socket.io publish-subscribe


【解决方案1】:

Pubsub 不会保留消息。完全没有。为了为此使用 Redis,您需要使用队列。例如,您可以使用列表操作的组合,其中生产者将它们推送到列表,而您的客户端服务器使用BLPOPBRPOP,具体取决于您添加它们的方式以及您是否希望消息采用 FIFO 或 LIFO 序列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2021-02-07
    • 2018-07-12
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多