web集群部署(实例大于等于2个),nginx作为中间件时候,后端websocket有时候消息无法传递给客户端

最近公司有一个需求:新订单需要及时提醒到后台管理者,基于这一点我决定采用Websocket来实现。

当我把项目部署到生产环境的时候发现一个问题:

建立了Websocket连接后,每当有新的订单发起,客户端都会受到新订单提醒。这时候就遇到一个问题,新订单进来之后 客户端有时候会有提醒 有时候却没有提醒,并且 Websocket 状态一直是开启。


经过一系列排查发现,我的web项目做了 集群部署 分别占用 8500,8501,8502 端口 ,客户端请求nginx的时候  会随机分配一个 实例 进行websocket 连接。在这种情况下  如果客户端的连接 不是和一开始建立连接的实例一样的话,是监听不到消息的。

因此我的解决方案是  修改nginx 的轮询策略 ,改为 ip_hash,一个ip的用户就分到指定的一台实例。


如果有大佬有更好的解决方案 请留言


你可能感兴趣的:(websocket,nginx,java)