基本信息

案例ID:142639

技术顾问:Mr.Long - 6年经验 - 网易游戏

联系沟通

微信扫码,建群沟通

项目名称:消息队列公共服务

所属行业:人工智能 - 其他

->查看更多案例

案例介绍

## 角色
架构、开发、运维 可联系微信查看源码

## 目标

- [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

相似案例推荐

其他人才的相似案例推荐

发布任务

企业点击发布任务,工程师会在任务下报名,招聘专员也会在1小时内与您联系,1小时内精准确定人才

微信接收人才推送

关注猿急送微信平台,接收实时人才推送

接收人才推送
联系需求方端客服
联系需求方端客服