基于redis消息总线
本章节针对消息总线的封装进行讲解,也叫发布订阅机制,用于解决跨服务或集群部署的问题。
基于redis的实现
1. 客户端发送消息
@Autowired
private JeecgRedisClient jeecgRedisClient;
BaseMap baseMap = new BaseMap();
baseMap.put("userId", "");
baseMap.put("message", message);
jeecgRedisClient.sendMessage(WebSocket.REDIS_TOPIC_NAME, baseMap);
2. 编写消息监听器
@Component(WebSocket.REDIS_TOPIC_NAME)
public class SocketHandler implements JeecgRedisListener {
@Autowired
private WebSocket webSocket;
@Override
public void onMessage(BaseMap map) {
log.debug("【Redis发布订阅模式】redis Listener: {},参数:{}",WebSocket.REDIS_TOPIC_NAME, map.toString());
String userId = map.get("userId");
String message = map.get("message");
if (ObjectUtil.isNotEmpty(userId)) {
//pc端消息推送具体人
webSocket.pushMessage(userId, message);
//app端消息推送具体人
webSocket.pushMessage(userId+CommonSendStatus.APP_SESSION_SUFFIX, message);
} else {
//推送全部
webSocket.pushMessage(message);
}
}
}