分布式消息队列 XXL-MQ v1.2.0,集群时移除 ZK 依赖更轻量级

许雪里
 许雪里
发布于 2018年11月28日
收藏 20

Release Notes

  • 1、client端与Broker长链初始化优化,防止重复创建连接。

  • 2、POM多项依赖升级;

  • 3、UI组件升级;

  • 4、规范项目目录结构;

  • 6、超时控制;

  • 5、通讯迁移至 xxl-rpc;

  • 6、除了springboot类型示例;新增无框架示例项目 "xxl-mq-samples-frameless"。不依赖第三方框架,只需main方法即可启动运行;

  • 7、消息生产,兼容"异步批量多线程生产"+"同步生产"两种方式,提升消息发送性能;

  • 8、底层通讯全异步化:消息新增 + 消息新增接受 + 消息回调 + 消息回调接受;仅批量PULL消息与锁消息非异步;

  • 9、串行消费优化,旧版本固定第一台消费,导致其压力过大;新版支持自定义shardingId从而实现串行消息的负载均衡,缓解单台压力;

  • 10、广播消息优化,旧版本不支持消息持久化,新版本支持消息持久化,而且广播支持与串行结合实用,更加灵活;

  • 11、并发消息、串行消息、广播消息全部优化重构,底层逻辑统一,方便后续维护扩展;

    • 串行:取消ZK依赖,废弃旧版ZK锁方式;优化为通过消息 shardingId 结合消费者排序取模方式;相同 shardingId 的消息将会固定被同一个消费者消费;

    • 并行:沿用旧版消费者排序取模方式,不过取模参数新增支持 shardingId 参数;确保消息平均分配给在线消费者;

    • 广播:取消ZK依赖,废弃旧版ZK方式;优化为通过消息 group 属性群发方式;每个group都会消费该消息,但相同group下消息仅被消费一次;

  • 12、Broker服务支持自定义指定注册IP等信息,位置 "XxlMqBrokerImpl.initServer";

  • 13、Topic自动发现:消息中心支持动态发现Topic,并展示在消息主题列表,延时1min;

  • 14、运行报表:支持展示在线业务线、消息主题、消息记录等信息、可在线查看消息日期分布图,成功分布图等;

  • 15、业务线管理:支持设置业务线,用于分组管理消息主题;

  • 16、消息主题管理:支持在线管理消息主题,自动发现消息主题;并支持完善消息主题扩展信息,如业务线、负责人、告警邮箱等;

  • 17、消息记录界面,交互优化重构,进一步优化消息筛选、管理交互;

  • 18、自动重试优化,任务重试时,生效时间重置为1min之后,重试次数减一;

  • 19、记住密码功能优化,选中时永久记住;非选中时关闭浏览器即登出;

  • 20、事务开关:支持设置消息事务开关,开启时事务保证消息精准消费一次;未开启时小概率存在重复消费,仅依靠注册中心分片检测避免重复,但性能略高;

  • 21、告警功能:支持以Topic粒度监控消息,存在失败消息时主动推送告警邮件;

  • 22、轨迹Log优化,新增、更新时记录核心数据;消息日志格式统一;

  • 23、消息在线清理:在消息记录界面,支持在线清理消息数据;

  • 24、过期消息自动清理:消息中心新增参数 "xxl-mq.log.logretentiondays"设置消息过期天数,过期成功消息将会自动清理;

  • 25、超时强化,除了客户端支持超时控制外;服务端新增线程扫描,主动处理超时消息;消息超过 "生效时间 + 超时时间 + 1HOUT" 之后仍然未结束,将会主动标记为失败;

  • 26、左侧菜单规范:运行报表(业务线,主题数,消息记录数;总消息成功率,日分布柱状图,总分布饼图) + 消息主题 + 消息记录 + 使用教程;

  • 27、注册中心迁移至DB,基于 "long polling" 实现注册机器实时感知;注册中心代码及逻辑来源自"XXL-RPC原生轻量级注册中心";

  • 28、轻量级改造,移除对ZK依赖,仅依赖DB即可完整集群方式提供服务;缺点,非强一致性可能导致重复消费,开启事务开关可以避免该问题;

  • 29、文档示例完善,包括:并发消息、串行消息、广播消息、延迟消息、失败重试消息、超时控制消息等;

  • 30、文档完善:消息模型说明,延时消息说明、事务消息说明、失败重试、超时控制说明,

  • 31、容器化:提供官方docker镜像,并实时更新推送dockerhub,进一步实现产品开箱即用;

简介

XXL-MQ是一款轻量级分布式消息队列,支持 "并发消息、串行消息、广播消息、延迟消息、事务消息、失败重试、超时控制" 等消息特性。现已开放源代码,开箱即用。

特性:

  • 1、简单易用: 一行代码即可发布一条消息; 一行注解即可订阅一个消息主题;

  • 2、轻量级: 部署简单,不依赖第三方服务,一分钟上手;

  • 3、消息中心HA:消息中心支持集群部署,可大大提高系统可用性,以及消息吞吐能力;

  • 4、消费者HA:消费者支持集群部署,保证消费者可用性;

  • 5、三种消息模式:

    • 并行消息:消息平均分配在该主题在线消费者,分片方式并行消费;适用于吞吐量较大的消息场景,如邮件发送、短信发送等业务逻辑

    • 串行消息:消息固定分配给该主题在线消费者中其中一个,FIFO方式串行消费;适用于严格限制并发的消息场景,如秒杀、抢单等排队业务逻辑;

    • 广播消息:消息将会广播发送给该主题在线消费者分组,全部分组都会消费该消息,但是一个分组下只会消费一次;适用于广播场景,如广播更新缓存等

  • 6、延时消息: 支持设置消息的延迟生效时间, 到达设置的生效时间时该消息才会被消费;适用于延时消费场景,如订单超时取消等;

  • 7、事务性: 消费者开启事务开关后,消息事务性保证只会成功执行一次;

  • 8、失败重试: 支持设置消息的重试次数, 在消息执行失败后将会按照设置的值进行消息重试执行,直至重试次数耗尽或者执行成功;

  • 9、超时控制: 支持自定义消息超时时间,消息消费超时将会主动中断;

  • 10、吞吐量: 依赖于部署的消费中心集群和DB性能;DB可借助多表提升性能,不考虑DB的情况下,吞吐量可以无限横向扩展;

  • 11、消息可见: 系统中每一条消息可通过Web界面在线查看,甚至支持编辑消息内容和消息状态;

  • 12、消息可追踪: 支持追踪每一条消息的执行路径, 便于排查业务问题;

  • 13、容器化:提供官方docker镜像,并实时更新推送dockerhub,进一步实现产品开箱即用;

  • 14、消息失败告警:支持以Topic粒度监控消息,存在失败消息时主动推送告警邮件;默认提供邮件方式失败告警,同时预留扩展接口,可方面的扩展短信、钉钉等告警方式;

  • 15、容器化:提供官方docker镜像,并实时更新推送dockerhub,进一步实现产品开箱即用;

文档地址

技术交流

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:分布式消息队列 XXL-MQ v1.2.0,集群时移除 ZK 依赖更轻量级
加载中

最新评论(19

超级大丁丁
超级大丁丁

引用来自“超级大丁丁”的评论

你给了我一种你很有空的感觉

引用来自“许雪里”的评论

时间都是挤出来的,可以看下commit时间,最集中时间都是在周末的凌晨。就为了发这个版本,通宵了两次。
敬佩。
许雪里
许雪里

引用来自“超级大丁丁”的评论

你给了我一种你很有空的感觉
时间都是挤出来的,可以看下commit时间,最集中时间都是在周末的凌晨。就为了发这个版本,通宵了两次。
超级大丁丁
超级大丁丁
你给了我一种你很有空的感觉
minghai
minghai
性能吞吐量咋样
许雪里
许雪里

引用来自“强子1985”的评论

感觉下回要写一个数据库了。。。
说笑了,数据库自我目前水平远远不及啊 (ノ`⊿´)ノ
许雪里
许雪里

引用来自“臭水沟”的评论

源代码就这几个类?类好少啊。。。
代码少有两个原因。

第一个原因:得益于模块化,底层通讯模块,注册模块等,抽像很完善,比如通讯模块抽像出一个独立包xxl-rpc。所以xxl-mq项目本身代码很精干,但是如果将xxl-rpc和xxl-registry的代码包含进来看,代码逻辑就复杂了,代码量也上去了。

第二个原因:得益于自研,底层模块组件大多自研,因此对各模块更加熟悉,功能上做定制或者裁剪更方便,否则用其他的开源依赖拖拖拉拉一大顿,代码量是上去了,但是多数是冗余的。

用代码量体现项目质量,就像用飞机重量体现飞机质量一样一样的。可以比对 ”项目特性” 列表,列出来的特性,都是完整支持的。
许雪里
许雪里

引用来自“prelove88”的评论

把xxl-conf也改造下,去zk😄
xxl-conf 的去zk迭代已经开始,近期会发布。
无论单机,还是集群部署,都不需要借助其他组件,zk、eureka通通不需要。真正的轻量级,开箱即用。
许雪里
许雪里

引用来自“prelove88”的评论

这个也去ZK了,速度~支持!
是的,目前流行去ZK,不过大多数只不过用新组件替代ZK而已。
既然要去ZK,就去的干干净净,借助它提供的功能通过自研实现,功能更可控。
臭水沟
臭水沟
源代码就这几个类?类好少啊。。。
p
prelove88
把xxl-conf也改造下,去zk😄
返回顶部
顶部