# 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服务进行转发消息(基于此开发) #### 软件架构 ![输入图片说明](images/%E6%9E%B6%E6%9E%84.png) 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左右 ![输入图片说明](images/qps.png) ![输入图片说明](images/rt.png) #### 参与贡献 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/)