顺序消息管道《Message Pipe》v1.0.1版本发布
时间:2022-07-24
本文章向大家介绍顺序消息管道《Message Pipe》v1.0.1版本发布,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
知识改变命运,撸码使我快乐,2020继续游走在开源界 点赞再看,养成习惯 给我来个Star吧,点击了解下基于SpringBoot的组件化接口服务落地解决方案
Message Pipe是什么?
它是minbox
开源组织内的新成员,Message Pipe
从字面的意思上理解为 "消息管道",它确实是一个消息管道的定位,是基于Redis
实现的分布式顺序消息管道。
源码地址
目前Message Pipe
开源平台以GitHub
为主,Gitee
则是一个同步库。
- GitHub:https://github.com/minbox-projects/message-pipe
- Gitee:https://gitee.com/minbox-projects/message-pipe
可以解决什么问题?
它主要是来解决分布式系统下消息的顺序消费的方案,内部通过Redisson
的分布式锁以及分布式队列的特性来完成消息的处理,消息的分发则是由Grpc
来完成的。
消息分发时支持常见的负载均衡策略,比如:随机策略、IP轮询方式等。
由于内部采用的是分布式锁的方式实现,所以支持多个Server
同时就行消息的轮询获取以及分发操作。
特性
- 自动注册
- 心跳检查
- 消息分发
- 顺序消费
- 读写分离
- 线程安全
- 负载均衡
- 自动剔除
- ...
更新日志
详见:https://github.com/minbox-projects/message-pipe/releases/tag/1.0.1.RELEASE
✨ New Features
- [ #39 ] Client通过 "Cglib动态代理" 的方式实现动态绑定管道
- [ #40 ] Client/Server 通过正则表达式进行匹配 "pipeName"
- [ #41 ] 禁用Server接收注册请求后根据每一个"Pipe Name"创建消息管道
- [ #47 ] 使用Jackson代替fastjson转换实体与json字符串之间的相互转换方式
- [ #51 ] MessageProcessor新增正则表达式方式处理消息,并为每个匹配的表达式管道建立一个Porxy代理类
- [ #59 ] Server启动时自动加载Redis内的消息管道列表,并自动创建MessagePipe实例
- [ #64 ] 重构Client连接Server的实现方式,新增支持Nacos NamingService方式
? Fix Bugs
- [ #45 ] 修复Client启动时一直重试注册到Server,导致阻塞主线程
- [ #48 ] 删除客户端ReceiveMessageService处理消息时使用线程池
- [ #53 ] 修复Redisson在高并发下出现的解锁异常
- [ #55 ] 修复获取MessageProcessors实例时可能出现线程安全性问题
- [ #57 ] 消息分发时,只有存在客户端列表才进行处理消息发送逻辑
- [ #61 ] Server运行过程中CPU飙升
- [ #65 ] Client注册时偶尔会出现获取IP地址为 "127.0.0.1"的情况
快速上手
为了快速上手,提供了message-pipe
使用的示例项目,项目源码:https://github.com/minbox-projects/message-pipe-example。
安装Redis
由于message-pipe
基于Redis
实现,所以我们首先需要在本机安装Redis
,下面是使用Docker
方式安装步骤:
# 拉取Redis镜像
docker pull redis
# 创建一个名为"redis"的后台运行容器,端口号映射宿主机6379
docker run --name redis -d -p 6379:6379 redis
查看Redis数据
# 运行容器内命令
docker exec -it redis /bin/sh
# 运行Redis客户端
redis-cli
# 选择索引为1的数据库
select 1
# 查看全部的数据
keys *
启动示例项目
# 下载源码
git clone https://github.com/minbox-projects/message-pipe-example.git
# 进入项目目录
cd message-pipe-example
# 运行Client与Server合并示例项目
cd client-server-merge
# 运行项目
mvn spring-boot:run
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Semaphore加锁与释放流程
- ReentrantLock加锁与释放过程
- 使用vue-cli4快速搭建vue项目demo
- Vue实现pc/H5弹窗拖拽
- 微信小程序skeleton骨架屏
- 微信小程序锚点选择导航栏
- vue-ripple-directive点击水波纹
- dubbo学习之源码创建属于自己的dubbo-demo
- Vue4.x配置env开发环境、测试环境、生产环境
- SpringBoot总结之CommandLineRunner
- 详细整理Spring事务失效的具体场景及解决方案
- Vue监听文本框实时输入限制输入长度
- 30 分钟轻松搞定正则表达式基础
- Vant引入CDN实现图片懒加载
- Js时间戳倒计时天时分秒