使用redis pubsub处理订户服务器脱机?

时间:2015-12-08 09:27:52

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

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

                 LoadBalancer (nginx)

      Proxy1      Proxy2      Proxy3      Proxy{N}

 BackEnd1   BackEnd2   BackEnd3   BackEnd4   BackEnd{N}

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

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

当代理向请求发送到后端服务器时,它会知道请求它的用户以及用户所在的代理。我担心的是,当代理服务器由于某种原因而脱机时,我的后端节点上的任何挂起请求将无法在用户重新联机时到达用户,因为在服务器脱机时发送的消息。我可以实现什么来规避这个问题,并且在任何代理服务器脱机时基本上让消息排队,然后在重新启动时交付?

1 个答案:

答案 0 :(得分:0)

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