package org.jeecg.modules.message.websocket; import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.base.BaseMap; import org.jeecg.common.constant.CommonSendStatus; import org.jeecg.common.modules.redis.listener.JeecgRedisListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * 监听消息(通过redis发布订阅,推送消息) * 此方案:解决集群部署的问题,多实例节点(也就是发送消息端先发送消息到redis中,每个服务节点收到redis消息,再触发具体的ws推送) * @author: jeecg-boot */ @Slf4j @Component(WebSocket.REDIS_TOPIC_NAME) public class SocketHandler implements JeecgRedisListener { @Autowired private WebSocket webSocket; @Override public void onMessage(BaseMap map) { log.info("【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); } } }