websocket (java)集群方案

通过使用Redis存储用户与服务器的关联关系,以及Kafka作为消息中间件,实现了WebSocket在集群环境下的消息推送。当用户需要跨服务器通信时,通过Redis找到对应服务器进行消息推送。这种方法解决了集群下的跨机器通讯问题,但存在新增节点需手动配置、编程复杂度增加等缺点。在服务器宕机情况下,需要确保能快速重启相同名称的服务器以避免消息丢失。
摘要由CSDN通过智能技术生成

这里写图片描述

redis 用来存用户与服务器的关系(redis可以任意替换为一种存储形式)
服务器 A 会订阅topic 为 WebSocket-A 的消息
服务器 B 会订阅topic 为 WebSocket-B 的消息
kafka 用来接收推送消息(替换为任意一种mq)

如果用户1需要给用户3发送信息,如果在单机情况下,由于用户3没有与server-A建立链接,所以推送不到。但是现在因为在redis存储了用户3和server-B的关联关系,所以直接推送到WebSocket-B主题之中即可。由server-B接受消息并推送给用户3。

优点:
1. 解决了集群情况下跨机器通讯问题。

缺点:
1. 没有达到随意增减节点的需求,新加机器需要配置server-id。
2. 编程复杂,需要手动注册kafka-listener消息节点。

再宕机的情况下,假如A服务器宕机了,WEBSOCKET-A的消息就没有消费者了,所以只要在能重启一台服务器名继续叫做A的机器即可,因为在代码中多了一次判断,调用逻辑如下

 @KafkaListener(id="
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值