顺序消息管道《Message Pipe》v1.0.2版本发布
Message Pipe是什么?
它是minbox
开源组织内的新成员,Message Pipe
从字面的意思上理解为 "消息管道",它确实是一个消息管道的定位,是基于Redis
实现的分布式顺序消息管道。
源码地址
目前Message Pipe
开源平台:
- GitHub:https://github.com/minbox-projects/message-pipe
- Gitee:https://gitee.com/minbox-projects/message-pipe
另外ApiBoot对它进行了集成,可以通过配置文件的形式快速把message-pipe
加入到项目中,详见:https://github.com/minbox-projects/api-boot。
集成相关代码:https://github.com/minbox-projects/api-boot/tree/master/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/message/pipe
可以解决什么问题?
它主要是来解决分布式系统下消息的顺序消费的方案,内部通过Redisson
的分布式锁以及分布式队列的特性来完成消息的处理,消息的分发则是由Grpc
来完成的。
消息分发时支持常见的负载均衡策略,比如:随机策略、IP轮询方式等。
由于内部采用的是分布式锁的方式实现,所以支持多个Server
同时就行消息的轮询获取以及分发操作。
更新日志
详见:https://github.com/minbox-projects/message-pipe/releases/tag/1.0.2.RELEASE
✨ New Features
- [ #75 ] 每个消息管道新增 ”MessagePipeDistributor“,用于自动分发管道内的消息
? Fix Bugs
- [ #77 ] 如果消息管道的数量超出配置上限,抛出异常提醒
? Optimizations
- [ #68 ] Server分发消息逻辑重构,优化线程池内线程占用CPU的使用率
- [ #70 ] 废除 “MessageDistributionExecutor” 概念,修改为 “MessageScheduler”
- [ #71 ] 废除 "MessagePipeMonitor" 公共消息管道监听器,为每个消息管道内的消息添加 "MessageMonitor"
- [ #72 ] 重构消息管道 "MessagePipe" ,内聚操作管道内消息的方法
快速上手
为了快速上手,提供了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
- MVC RC2中关于HtmlHelper给DropDownList设置初始选中值的问题
- 结构struct(值类型)在实际应用要注意的二点:
- 王璋:腾讯云为游戏行业提供解决方案
- 利用Reflector把"闭包"看清楚
- CSS伪类的三种写法
- 吴晓斌:"吃鸡"游戏全球多地部署架构分析
- silverlight + wcf(json格式) + sqlserver存储过程分页
- 联众收购多家公司 多枚域名齐助阵
- Android AlertDialog去除黑边白边自定义布局(转)
- “超自然”域名近139万易主
- 服务器磁盘监控脚本分享(含报警邮件)
- 通用分页存储过程
- 你真的会玩SQL吗?表表达式,排名函数
- 你真的会玩SQL吗?EXISTS和IN之间的区别
- 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 数组属性和方法
- 如何在Windows下使用NCL
- Python基础绘图教程(一)
- 如何通过VMware安装Linux CentOS 7.7系统
- HBase入门
- VMware如何克隆一个虚拟机 主机名修改IP地址修改数据目录创建
- Python基础绘图教程(二)
- Docker简介与安装
- python绘图 | 国家气象局开源预报检验库(多图预警)
- Docker镜像与容器的常用操作
- DiDi Kafka-Manager安装和简单使用
- Docker数据管理与挂载管理
- Docker Dockerfile 指令详解与实战案例
- flume kafka和sparkstreaming整合
- Docker如何搭建私有registry镜像仓库
- Harbor介绍与企业级私有Docker镜像仓库搭建