## 角色
架构、开发、运维 可联系微信查看源码
## 目标
- [x] **发消息到MQ**
- [x] **不漏发消息**
- [x] **不重复发消息**
- [x] **消费消息**
- [x] **不漏消费消息**
- [x] **不重复消费消息(需客户端去重 仅java端调通**)
<p style="color:red;">说明:
考虑到去重一定要集成分布式缓存中间件(如:redis),计划下一版支持用户配置是否是去重</p>
## 实现思路
- 基于netty搭建TCP服务
- 跨语言通信:
- 采用json字符串传输
- 发起端每发起一条记录带上换行符"\n" 用于拆包
- data数据采用base64加密
- 服务端负责发送和消费消息队列数据
## 自定义通信协议
## 支持方法
1. register:向服务端注册客户端信息,在建立连接时
2. send:发送消息
3. unregister:注销该客户端向服务端监听的所有topic
4. pause:暂停向服务端消费数据
5. resume:唤醒向服务端消费数据,只能唤醒暂停消费的topic
6. subscribe:增加监听topic
7. unsubscribe:取消监听topic
## 客户端如何对接服务端?
1. 基于socket通信,挑选各语言成熟的框架(如:java netty),大神使用原生支持(如:node net)
2. 理解MQS TCP 通信流程
3. 客户端发送消息需提供协议ID(客户端通信唯一ID 长整型数字自增即可),为了处理失败情况,请把数据暂存(推荐使用环形队列)
4. 客户端消费数据需去重。推荐使用redis去重,用Key-Value存储即可,保证key唯一,**一定要设置过期时间哟,过期时间可以设大点,java设置30分钟是能完全去重的**。j