33 lines
1.7 KiB
Markdown
33 lines
1.7 KiB
Markdown
# 通用消息公告模块
|
|
## 简介
|
|
痛用消息模块使用netty实现的websocket,引入common-websocket模块进行实现,基于netty集群+rabbitmq实现集群模式下的消息精准推送功能。
|
|
|
|
通用消息模块可为系统任意模块提供消息发布和websocket消息推送功能,并对外提供rpc消息发送功能。
|
|
|
|
消息推送时可以指定发送到指定用户,发送到指定角色,发送到指定部门或者全部发送四大模式。
|
|
|
|
在用户侧websocket不作为用户与service进行消息发送的桥梁,websocket只会进行消息的推送和授权,消息的发送则是使用消息发送接口进行。
|
|
|
|
## 消息推送时序图
|
|

|
|
|
|
## 消息发送确认机制
|
|
|
|

|
|
- 当用户发送消息后,消息首选会数据库进行持久化,持久化成功推送至mq,若消息推送失败则发生数据库回滚。
|
|
- mq接受到消息之后,向netty的监听服务发起事件,netty进行消费,消费成功手动ack确认,若3次消费失败,则认为当前服务消费失败,手动ack确认消息消费失败,并删除mq中的消息。
|
|
|
|
## websocket连接与授权
|
|
连接: websocket请求url为http://gateway-service/notice-ws/notice。
|
|
|
|
授权: 授权需要获取到用户登录时获取到的token,并按照规定数据格式在连接成功websocket之后发送授权信息,如果连接websocket 3s内未发送授权验证信息,连接将被自动断开。
|
|
```json
|
|
{
|
|
"token": "用户令牌",
|
|
"cluster": "消息群组"
|
|
}
|
|
```
|
|
|
|
## notice服务实现模块分离
|
|
在notice服务中,消息体或者websocket连接用户授权是都需要指定到消息群组(cluster),notice服务则通过cluster区分消息群组,并对其用户的websocket连接进行隔离。
|