(参考:【进阶篇】2.16 Redis 消息传递发布订阅模式详解_redis发布订阅模式-优快云博客
)
1,页面message/index.vue(系统管理/通知通告)从下拉操作“点击发布”
2,接受请求
src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java
@RequestMapping(value = "/doReleaseData", method = RequestMethod.GET)
public Result<SysAnnouncement> doReleaseData(…)
(1)将本通告保存为“已发送”
(2)调用websocket,发送点对点消息
webSocket.sendMessage(obj.toJSONString());
webSocket.sendMessage(userIds, obj.toJSONString());
(3)redis的订阅发布模式下的监听器
src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java
监听消息(通过redis发布订阅,推送消息)
* 此方案:解决集群部署的问题,多实例节点(也就是发送消息端先发送消息到redis中,每个服务节点收到redis消息,再触发具体的ws推送)
SocketHandler.java àonMessage()
Redis初始化配置类
org.jeecg.common.modules.redis.config.RedisConfig.java
配置监听容器jeecg_redis_topic
@Bean
public RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory, RedisReceiver redisReceiver, MessageListenerAdapter commonListenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
container.addMessageListener(commonListenerAdapter, new ChannelTopic("jeecg_redis_topic"));
return container;
}
(4) 同步企业微信、钉钉的消息通知
Response<String> dtResponse = dingtalkService.sendActionCardMessage(sysAnnouncement, null, true);
wechatEnterpriseService.sendTextCardMessage(sysAnnouncement, true);