RocketMQ4.4.0新特性分享
rocketmq
1、架构
MQ历史
由数据结构队列发展而来
MQ使用场景
异步处理
解耦
削峰填谷
数据同步
2、队列
3、使用
生产
同步(sync)
默认重试2次总共3次
默认等待超时时间为3s
异步(async)
总共重试2次
单向(oneway)
Message
topic:主题名称
tag:消息TAG,用于消息过滤
对消息的整体分类,比如 topic为物流跟踪轨迹 ,轨迹包含 揽收 出库 入库 派送 签收,可以分别给这些相同topic不同类型的数据打标签分类解析处理
keys:Message索引键,多个用空格隔开,RocketMQ可以根据这些key快速检索到消息
对消息关键字的提取方便查询,比如一条消息某个关键字是 运单号,之后我们可以使用这个运单号作为关键字进行查询
waitStoreMsgOK:消息发送时是否等消息存储完成后再返
delayTimeLevel:消息延迟级别,用于定时消息或消息重
User property:自定义消息属性
批量发送
单批次消息不能超过maxMessageSize大小(默认4M)
客户端instance:如果instance为默认值DEFAULT的话,RocketMQ会自动将instance设置为IP+进程ID(建议不要设置,默认生成就好),默认最大4M
钩子方法
消费
批量消费总数为32,broker设置
如果消息消费次数超过maxReconsumeTimes还未成功,则将该消息转移到一个失败队列,等待被删除
消息消费超时时间,默认为15分钟
消息最大重试次数,默认为16次
consumeConcurrentlyMaxSpan,并发消息消费时处理队列最大跨度,默认2000,表示如果消息处理队列中偏移量最大的消息与偏移量最小的消息的跨度超过2000则延迟50毫秒后再拉取消息
pullInterval=0,推模式下拉取任务间隔时间,默认一次拉取任务完成继续拉取
consumeMessageBatchMaxSize:消息并发消费时一次消费消息条数,通俗点说就是每次传入MessageListtener#consumeMessage中的消息条数
RocketMQ消息重试是以消费组为单位,而不是主题,消息重试主题名为%RETRY%+消费组名。消费者在启动的时候会自动订阅该主题,参与该主题的消息队列负载
同一个消息队列只会分配给一个消费者,故如果消费者个数大于消息队列数量,则有些消费者无法消费消息。
如果延迟级别大于0,则会将消息的主题设置为SCHEDULE_TOPIC_XXXX
transactionId 事物ID会自己生成
ConsumeFromWhere
CONSUME_FROM_FIRST_OFFSET:从头开始消费
ONSUME_FROM_TIMESTAMP:从消费者启动的时间戳对应的消费进度开始消费
CONSUME_FROM_LAST_OFFSET:从队列最新偏移量开始消费
CONSUME_SUCCESS:消费成功
RECONSUME_LATER:延迟消费,放弃本批次消息消费 类似于continue,如果有重试次数没有达到最大上限会再次消费
消息消费模式
集群模式:默认模式,主题下的同一条消息只允许被其中一个消费者消费
消费进度存储在服务端
广播模式:主题下的同一条消息将被集群内的所有消费者消费一次
消费进度存储在消费者本地
消息传输模式
拉取消息模式:消费端主动发起拉消息请求
长轮询模式使得消息拉取能实现准实时
从服务器拉取消息->放入内存队列->提交消息到处理线程池
并发消费
推送消息模式:RocketMQ消息推模式的实现基于拉模式
RocketMQ并没有真正实现推模式,而是消费者主动向消息服务器拉取消息,RocketMQ推模式是循环向消息服务端发送消息拉取请求
单独线程池拉取消息,然后调用监听api接口
单独线程池拉取->内存队列->消息处理线程池处理->移除客户端内存队列消息并更新进度
顺序消息
消费过程 消息队列负载->消息拉取->消息消费->消息消费进度存储。
支持局部顺序消息消费,也就是保证同一个消息队列上的消息顺序消费
如果要实现某一主题的全局顺序消息消费,可以将该主题的队列数设置为1,牺牲高性能和可用性
顺序消息在创建消息队列拉取任务时需要在Broker服务器锁定该消息队列。
MAX_TIME_CONSUME_CONTINUOUSLY:每次消费任务最大持续时间,默认为60s,切换线程
顺序消息消费的并发度为消息队列。也就是一个消息消费队列同一时刻只会被一个消费线程池中一个线程消费。
达到重试次数上限,转移到死信队列,继续后续消息的消费
定时消息
消息发送之后并不立即被消费者消费,而是要等到特定的时间之后才能被消费
不支持任意时间精度定时发送,只支持配置级别的时间默认为"1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h",delayLevel=1表示延迟1s,delayLevel=2表示延迟5s,依次类推。
SCHEDULE_TOPIC_XXXX定时消息主题
消息过滤
tag
tag服务端只是验证了TAG的hashcode,客户端再次对消息进行tag值对比过滤
sql(SQL92表达式)
(官方示例有bug)表达式没有想象的好用,建议大家接收到消息自己判断筛选
类过滤:定制过滤消息
消息过滤服务器(不讲解)
consumer->filterserver->broker
事物消息
1分钟回查一次,默认5次
事物
单向消息(One-way)
其实就是UDP协议的实现
TCP协议是可靠消息传输协议,请求消息都会有相应和校验,在会话层和传输层解决应答
4、填坑方案
如果有大量消息积压
增加消费者数量
如果有大量消息积压并且马上就到了自动清理的时间
重新消费导流到新的topic,增大新topic的队列数量
5、bug
netty epoll 4.4.0之前版本没有实现
6、问题
为什么某条消息报异常会阻塞整个队列消费
ProcessQueue中队列最大偏移量与最小偏离量的间距,不能超过consumeConcurrentlyMaxSpan,否则触发流控。这里主要的考量是担心一条消息堵塞,消息进度无法向前推进,可能造成大量消息重复消费
7、初始化客户端注解
@PostConstruct 由JSR-250提供,在构造函数执行完之后执行,等价于xml配置文件中bean的initMethod
如果同一个jvm中同时注入生产者和消费者使用bean注解
会有异常抛出
8、客户端驱动程序
Java
Go
.net
Php
c++
Nodejs
RocketMQ4.4.0新特性分享的更多相关文章
- [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
[翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...
- 浅谈Tuple之C#4.0新特性那些事儿你还记得多少?
来源:微信公众号CodeL 今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的: 看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办 ...
- Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView
Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView 8.0出来很久了,这个新特性已经用了很久了,但是一直没有亲自去试试.这几天新的需求来 ...
- Django 2.0 新特性 抢先看!
一.Python兼容性 Django 2.0支持Python3.4.3.5和3.6.Django官方强烈推荐每个系列的最新版本. 最重要的是Django 2.0不再支持Python2! Django ...
- Spring Boot 2(一):Spring Boot 2.0新特性
Spring Boot 2(一):Spring Boot 2.0新特性 Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2 ...
- 四、C# 5.0 新特性——Async和Await使异步编程更简单
一.引言 .NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就 ...
- android6.0、7.0、8.0新特性总结之开发应用时加以考虑的一些主要变更。
android6.0 参考一:简书Android 6.0 新特性详解 参考二:关于Android6.0以上系统的权限问题 参考三:值得你关注的Android6.0上的重要变化(一) 参考四:值得你关注 ...
- C# 9.0新特性
CandidateFeaturesForCSharp9 看到标题,是不是认为我把标题写错了?是的,C# 8.0还未正式发布,在官网它的最新版本还是Preview 5,通往C#9的漫长道路却已经开始.前 ...
- Android 7.0新特性
还望支持个人博客站:http://www.enjoytoday.cn 由于google目前不是无法直接在国内访问,故此,对于android 开发平台的7.0新特性做个保存.也可供大家查阅.原文转自an ...
随机推荐
- Mongodb---操作备忘
mysql/mongodb对比 CREATE TABLE USERS (a Number, b Number) Implicit or use MongoDB::createCollection() ...
- 运用BT在centos下搭建一个博客论坛
在日常的工作和学习中,我们都很希望有自己的工作站,就是自己的服务器,自己给自己搭建一个博客或者是论坛,用于自己来写博客和搭建网站论坛.现在我们就用一个简单的方法来教大家如何30分钟内部署一个博客网站. ...
- 知识点:java一些方法会有横线?以Date 过期方法为例
原因:他们的开发者在升级方法后,添加了@Deprecated注释, 目的是为了提醒我们,这个方法现在已经有新的方法了,不建议继续使用! 比如: JAVA中Date的tolocalstring为什么不建 ...
- mac上如何解压和压缩rar文件
许多喜欢mac的人都知道,这个os没有像win上winRAR或者hao123解压等类似软件,对于文件的压缩和解压很不方便,在下载rar的文件包之后就会束手无策,很是尴尬至极,为了避免这种情况,自己动手 ...
- 用beego开发服务端应用
用beego开发服务端应用 说明 Quick Start 安装 创建应用 编译运行 打包发布 代码生成 开发文档 目录结构说明 使用配置文件 beego默认参数 路由设置 路由的表述方式 直接设置路由 ...
- Oracle中的instr()函数
一.instr()函数 1.语法:instr(sourceString,destString,start,appearPosition) sourceString代表源字符串; destString代 ...
- BZOJ_4554_[Tjoi2016&Heoi2016]游戏_二分图匹配
BZOJ_4554_[Tjoi2016&Heoi2016]游戏_二分图匹配 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若 ...
- python使用sqlmap API检测SQL注入
0x00前言: 大家都知道sqlmap是非常强大的sql注入工具,最近发现他有个sqlmap API,上网查了一下.发现这是 sqlmap的微端.(可以叫做sqlmap在线检测sql注入= =) 0x ...
- Python + Appium 【已解决】driver(session)在多个class之间复用,执行完一个类的用例,再次执行下个类的用例时不需要初始化
实现效果:打开App进行自动化测试,只需打开APP一次,按先后顺序执行n个py文件中的相应操作,实现自动化测试. 示例:如截图示例,一个App,根据此APP内不同的模块,写成了不同的py文件, 预期结 ...
- Appium+python的环境搭建!
我的电脑64位操作系统 下载并安装所需软件: 1.adb环境 2.下载(python-2.7.12.amd64.msi)并安装python 3.下载并解压adt,如(adt-bundle-window ...