消息队列公共服务

人工智能 · 其他 案例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小时精推人才

需求方专属客服,免费梳理匹配

需求方客服微信二维码
扫码加微信 · 客服人工对接
微信沟通 联系需求方端客服 看中这位工程师了?客服帮你 1 小时对接沟通 → ×