# distribute_message
**Repository Path**: weiqingbin666/distribute_message
## Basic Information
- **Project Name**: distribute_message
- **Description**: 分布式消息转发,netty,zookeeper,IM
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 12
- **Forks**: 0
- **Created**: 2023-08-22
- **Last Updated**: 2025-04-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Netty, zookeeper, 分布式消息, 集群间通讯
## README
#### 介绍
实现集群间通信,比如:客户端C1和服务端S1建立连接,客户端C2和服务端S2建立连接,C1给C2发送消息,C2如何接收的问题
1. 服务端之间建立连接
服务大多是集群化部署,每个服务都要与前面的n-1个服务建立连接,假如共有n个服务,那么建立的连接数是多少呢?1+2+3+...+n-1 = n * (n-1)/2;
可见随着服务数增多,光维持心跳都消耗不少的资源
2. mq
mq广播模式极大浪费资源;建议集群模式(每个server订阅一个topic,将client和topic的映射保存到redis,根据client找到topic发送msg,这样对应server就收到了)
3. redis pubsub or 队列
4. 单独搭建tcp服务进行转发消息(基于此开发)
#### 软件架构

Distribute Server为tcp转发服务,可以启动多个,这里只画出一个,默认采用随机策略来选择 Distribute Server。
1. 基于netty主从模式搭建tcp服务端、客户端作为网络传输框架
2. 采用二进制协议的 protostuff进行序列化
3. 实现了序列化、反序列化的zero-copy,大大减少了内存分配、复制的开销(对象 > ByteBuf, ByteBuf > 对象)
4. 异步、缓存
5. 实现ack机制,接收者收到消息,返回ack,在超时时间后,没有收到ack,抛出异常给发送者(可以选择性开启ack)
#### 安装教程
前提:运行redis,zookeeper
1. center为转发服务,启动类BootStrap
2. client基于springboot开发的二方包
3. client-test为example
#### 使用说明
1. 如何进行简单测试
先运行center中的 BootStrap启动类,
client-test,启动两个进程,每个进程都要调用/login接口,clientId 不能一样(clientId 代表两个客户端id),访问/send接口,from to必填,from和to分别对应你那两个进程中的clientId,如下
http://localhost:7020/login?clientId=1001
http://localhost:7021/login?clientId=1002
http://localhost:7020/send?from=1001&to=1002
2. 如何进行压力测试:
先运行center中的 BootStrap启动类,再运行RedirectTest
3. RedirectTest模拟多个客户端,相互发消息给对方
4. 当然你也可以以jar的形式运行client-tes,默认启动类RedirectTest
#### 压测结果
压测详情:https://www.yuque.com/weiqb/xb4msy/ifc0uaw4p3v0m1pd?singleDoc# 《distribute_message压测》
在200连接下,qps约29万左右, rt0.8ms左右


#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 喜欢就Star一下吧 你的Star是我前进的动力
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)