cloud-security-wiki/docs/module/notice/README.md

1.6 KiB

通用消息公告模块

简介

痛用消息模块使用netty实现的websocket,引入common-websocket模块进行实现,基于netty集群+rabbitmq实现集群模式下的消息精准推送功能。

通用消息模块可为系统任意模块提供消息发布和websocket消息推送功能,并对外提供rpc消息发送功能。

消息推送时可以指定发送到指定用户,发送到指定角色,发送到指定部门或者全部发送四大模式。

在用户侧websocket不作为用户与service进行消息发送的桥梁,websocket只会进行消息的推送和授权,消息的发送则是使用消息发送接口进行。

消息推送时序图

img.png

消息发送确认机制

img_1.png

  • 当用户发送消息后,消息首选会数据库进行持久化,持久化成功推送至mq,若消息推送失败则发生数据库回滚。
  • mq接受到消息之后,向netty的监听服务发起事件,netty进行消费,消费成功手动ack确认,若3次消费失败,则认为当前服务消费失败,手动ack确认消息消费失败,并删除mq中的消息。

websocket连接与授权

连接: websocket请求url为http://gateway-service/notice-ws/notice

授权: 授权需要获取到用户登录时获取到的token,并按照规定数据格式在连接成功websocket之后发送授权信息。

{
  "token": "用户令牌",
  "cluster": "消息群组"
}

notice服务实现模块分离

在notice服务中,消息体或者websocket连接用户授权是都需要指定到消息群组(cluster),notice服务则通过cluster区分消息群组,并对其用户的websocket连接进行隔离。