RocketMQ
文章平均质量分 66
张俊杰zjj
一个大龄的码农.目前是Java+Python开发,业余时间研究减肥健身养生,后期可能会去做减肥健身博主.
展开
-
RocketMQ的消息幂等
出自图灵学院 笔记 . 自己整理了一下1、幂等的概念在MQ系统中,对于消息幂等有三种实现语义:at most once 最多一次:每条消息最多只会被消费一次at least once 至少一次:每条消息至少会被消费一次exactly once 刚刚好一次:每条消息都只会确定的消费一次,这个就需要有非常好的设计了.官方开源的RocketMQ无法保证exactly once ,只能保证at least once在商业版本有机制可以保证exactly once ,但是商业版是闭源的,外.原创 2021-10-30 17:13:24 · 2331 阅读 · 0 评论 -
RocketMQ死信队列概念使用注意事项
概念RocketMQ设计的思想是如果自动出现了死信队列的话,说明这个消息的消费是出了问题了,建议你手动去查询这些死信队列的消息,然后你要去针对性的去做处理.所以死信队列就是一个普通的队列, 你可以临时增加一些Consumer去订阅死信队列topic,然后消费死信队列的消息,就是人工补偿的机制.当一条消息消费失败,RocketMQ就会自动进行消息重试。而如果消息超过最大重试次数,RocketMQ就会认为这个消息有问题。但是此时,RocketMQ不会立刻将这个有问题的消息丢弃,而会将其发送到这个消费者组对应原创 2021-10-30 16:25:44 · 1367 阅读 · 0 评论 -
RocketMQ消息重试机制使用以及注意事项原理
出自图灵学院 我整理了一下,把老师说的话,敲了一下记录下来发了个博客概述首先对于广播模式的消息, 是不存在消息重试的机制的,即消息消费失败后,不会再重新进行发送,而只是继续消费新的消息。而对于普通的消息,只要消费者消费消息失败后,就会自动进行重试.如何让消息进行重试集群消费方式下,消息消费失败后期望消息重试,需要在消息监听器接口的实现中明确进行配置。可以有三种配置方式:返回Action.ReconsumeLater-推荐返回null抛出异常public class MessageL.原创 2021-10-30 16:23:47 · 2016 阅读 · 0 评论 -
RocketMQ生产者和消费者的负载均衡分配策略
负载均衡分两块儿,一个是producer的负载均衡,一个是Comsumer的负载均衡Producer负载均衡Producer发送消息时,默认会轮询目标Topic下的所有MessageQueue,并采用递增取模的方式往不同的MessageQueue上发送消息,以达到让消息平均落在不同的queue上的目的。而由于MessageQueue是分布在不同的Broker上的,所以消息也会发送到不同的broker上。同时生产者在发送消息时,可以指定一个MessageQueueSelector。通过这个对象来原创 2021-10-30 15:47:50 · 3412 阅读 · 0 评论 -
RocketMQ的消息存储结构
文件的存储路径配置broker.properties#存储路径storePathRootDir=/app/rocketmq/store#commitLog 存储路径storePathCommitLog=/app/rocketmq/store/commitlog#消费队列存储路径存储路径storePathConsumeQueue=/app/rocketmq/store/consumequeue#消息索引存储路径storePathIndex=/app/rocketmq/store/index原创 2021-10-30 14:50:27 · 674 阅读 · 0 评论 -
RocketMQ消息存储原理
1、何时存储消息producer发送到mq中,然后Comsumer去消费,mq为了保证工作效率,所有的消息肯定是在内存中去中转的,那么就有个问题,一断电,内存中的消息就丢失了,肯定得有个方式需要把消息存到硬盘中.MQ收到消息之后会给producer一个响应,然后给消息存到硬盘里面MQ给消息推送给consumer之后也会等待consumer给MQ的响应,MQ收到了consumer的成功消费的响应,那么MQ肯定是不会再推这个消息了 ,肯定得有个标记,去标记这个队列里面的消息消费情况MQ会定期删除一些过原创 2021-10-30 14:47:59 · 651 阅读 · 0 评论 -
RocketMQ的刷盘机制
RocketMQ需要将消息存储到磁盘上,这样才能保证断电后消息不会丢失。同时这样才可以让存储的消息量可以超出内存的限制。RocketMQ为了提高性能,会尽量保证磁盘的顺序写。消息在写入磁盘时,有两种写磁盘的方式,同步刷盘和异步刷盘关于同步刷盘和异步刷盘消息发给mq之后会存硬盘,存的时候也有区别,如果为了保证存储的效率,通常会先数据存到PAGECACHE缓存,mq将消息存到PAGECACHE缓存之后,就给broker一个响应结果, 然后另外有一个线程专门去做把PAGECACHE的数据写到磁盘里面,这个原创 2021-10-30 14:43:03 · 724 阅读 · 0 评论 -
RocketMQ消息主从复制原理
我们在搭建RocketMQ集群的时候会有master节点,下面会有slave节点, producer发送消息给master节点之后,master节点会把消息同步给slave节点上进行存储,同步数据的时候就会有个同步复制还是异步复制的问题.同步复制master节点发送消息给slave节点之后,master节点会进行等待, 等master和slave都写入消息成功后才反馈给客户端写入成功的状态,master节点才会接着同步下面的数据.在同步复制下,如果Master节点故障,Slave上有全部的数据原创 2021-10-30 14:33:10 · 563 阅读 · 0 评论 -
SpringCloudStream整合RocketMQ以及入门demo
出自 图灵学院 ,我自己学了一下,然后自己做了个笔记,再结合老师的讲义,整理了一下,写了个博客概述SpringCloudStream是Spring社区提供的一个统一的消息驱动框架,目的是想要以一个统一的编程模型来对接所有的MQ消息中间件产品。我们还是来看看SpringCloudStream如何来集成RocketMQ。SpringCloudStream更牛逼的事情就是解耦,假如说我以后换MQ了,我把RocketMQ换成RabbitMQ了,或者Kafka了,我代码不需要任何改动,只需要换Maven依赖.原创 2021-10-25 21:29:06 · 1577 阅读 · 4 评论 -
SpringBoot整合RocketMQ的一些Demo使用
原文 出自 图灵学院 四期 RocketMQ的讲义 ,我自己整理了一下,然后听课的时候自己也记了一些笔记,整理完了发到了博客上.注意点在使用SpringBoot的starter集成包时,要特别注意版本。因为SpringBoot集成RocketMQ的starter依赖是由Spring社区提供的,目前正在快速迭代的过程当中,不同版本之间的差距非常大,甚至基础的底层对象都会经常有改动。例如如果使用rocketmq-spring-boot-starter:2.0.4版本开发的代码,升级到目前最新的rocke.原创 2021-10-25 20:22:22 · 1138 阅读 · 0 评论 -
RocketMQ的 ACL权限控制
ACL权限控制概念权限控制(ACL)作用就是指定Topic由哪些用户可以访问,在生产应用中很重要,ACL可以控制我认为正常的用户可以访问我这个指定的topic,其它用户就访问不了,这个功能就是鉴权功能.另外需要了解的是 其实这种acl用的很少,因为大多数情况下都是运维去控制,而不是Java程序员在代码里面去控制作为码农了解就行了开始操作首先服务端需要配置鉴权的规则,然后客户端需要加上鉴权的信息,分这样的两个步骤服务端配置鉴权规则broker.properties添加下面的配置:# 开启鉴权.原创 2021-10-24 21:50:24 · 4586 阅读 · 0 评论 -
RocketMQ的事务消息的原理介绍和demo使用
事务消息只和生产者有关系,和消费者没有太大的关系,事务复杂流程订单系统生产者通过RocketMQ发送消息给消费者1.首先会把我们在代码中发的普通消息转成一个half消息,这个half对消费者是不可见的.2.RocketMQ会返回half消息接收的结果3.订单系统接收到了half消息结果之后会去执行一个本地事务,就是执行executeLocalTransaction方法4.订单系统向RocketMQ返回一个状态,状态包括commit,rollback,unknown 三种状态,如果是commi原创 2021-10-24 20:05:36 · 1347 阅读 · 2 评论 -
RocketMQ的消息过滤功能概念和demo
概述官方推荐的是一个系统就用一个topic,然后系统下的类目就用tag来区分,比如说订单系统,整个订单就放到一个topic下,是下单还是支付还是退款等等发消息的时候通过不同的tag来区分.broker再推送消息给consumer的时候就提前通过tag来判断是否推送到这个consumer了,如果你这个consumer没配置这个tag,那么broker就不会把这个tag推送给你.这样的好处就可以减少网络IO.SQL92语法RocketMQ只定义了一些基本语法来支持这个特性。你也可以很容易地扩展它。数原创 2021-10-23 18:04:43 · 276 阅读 · 0 评论 -
RocketMQ批量消息介绍和入门demo以及消息超过了限制如何解决
介绍批量消息是指将多条小的消息合并成一个批量消息,一次发送出去。这样的好处是可以减少网络IO,提升吞吐量。比如说原本我有三条消息,如果三条消息分三次发的话,会走三次网络IO,如果我给三条消息整成一起发送,这样就走一次网络了.不足批量消息虽然好用,但是也有一些不足,官方说一次批量消息不能大于1MB, 实际上实际使用的时候一次发送最大的消息是4MB左右.使用限制这些消息应该有相同的Topic,相同的waitStoreMsgOK。而且不能是延迟消息、事务消息等。入门代码案例说明要想批量发送消息,原创 2021-10-23 15:32:15 · 1629 阅读 · 0 评论 -
the message is illegal, maybe msg body or properties length not matched. msg body length limit 128k,
RocketMq错误分析Exception in thread "main" org.apache.rocketmq.client.exception.MQBrokerException: CODE: 13 DESC: the message is illegal, maybe msg body or properties length not matched. msg body length limit 128k, msg properties length limit 32k.For more i原创 2021-10-23 14:19:05 · 1555 阅读 · 0 评论 -
RocketMQ 延迟消息 的介绍和使用demo
介绍说白了就是消息不要立即发送,过一会儿发送,延迟时间的设置就是在Message消息对象上设置一个延迟级别message.setDelayTimeLevel(3);开源版本的RocketMQ中只支持18个固定的延迟级别,1到18分别对应messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h。在商业版本的可以设置设置任何时间去发送,如果你想在开源版本去做到任何时间设置去发送,那么只能去改源码.案例生产原创 2021-10-21 20:14:33 · 757 阅读 · 0 评论 -
RocketMQ的消息广播模式概念和使用
概念广播消息是:我需要这个消息被所有的消费者都消费到,不管你是哪个集群.广播模式和生产者是没什么关系的,是在消费者这里设置代码操作说明只需要在消费者里面设置 consumer.setMessageModel(MessageModel.BROADCASTING); 即可,设置setMessageModel(MessageModel.BROADCASTING) 即可设置成广播模式,此时你发送的消息会在所有的Consumer都会收到,而不会只往一个组里面的一个消费者去消费,这里可以设置两种模式: 默原创 2021-10-21 19:39:47 · 4240 阅读 · 0 评论 -
RocketMQ使用SelectMessageQueueByHash 保证顺序有序
使用SelectMessageQueueByHash 保证顺序有序说明这里演示使用SelectMessageQueueByHash ,也可以自定义消息队列选择器:自定义消息队列选择器的博客地址是 :https://zjj1994.blog.csdn.net/article/details/120875465Comsumerpackage org.apache.rocketmq.example.ordermessage;import org.apache.rocketmq.client.c原创 2021-10-21 11:28:27 · 879 阅读 · 0 评论 -
RocketMQ保证消息有序之自定义消息队列选择器
怎么保证全局有序?保证全局有序有个最简单的方式,就是topic里面只有一个队列,这样就可以保证全局有序,但是有人会这样用么? 肯定不会的,因为这样用的话,性能吞吐量安全性都会非常的差.所以都是保证局部有序,而不是全局有序.保证顺序有序使用场景订单支付,一个订单下来必须是有顺序的,比如说 必须先支付 然后再营销 ,然后进入 物流发订单 , 这样顺序是不能乱的.或者聊天功能: 我们所有人发的顺序需要保证有序,不能说是你先发的,然后再别人后面才到.所以这就是要保证局部有序.案例生产者发送10个原创 2021-10-20 21:24:21 · 861 阅读 · 0 评论 -
Docker安装部署rocketmq-console 工具
拉取命令:docker pull styletang/rocketmq-console-ng后台启动命令:docker run -d -e “JAVA_OPTS=-Drocketmq.config.namesrvAddr=zjj101:9876;zjj102:9876;zjj103:9876 -Drocketmq.config.isVIPChannel=false” -p 8080:8080 -t styletang/rocketmq-console-ng说明: namesrvAddr 是原创 2021-10-20 20:02:33 · 1867 阅读 · 0 评论 -
RocketMQConsumer两种接收消息的方式
消费者消费消息有两种模式,一种是消费者主动去Broker上拉取消息的拉模式,另一种是消费者等待Broker把消息推送过来的推模式。拉模式Consumer主动发送请求到MQ去拉取消息老版本需要自己管理Offset偏移量,不建议使用.package org.apache.rocketmq.example.simple;import org.apache.rocketmq.client.consumer.DefaultMQPullConsumer;import org.apache.rocketm原创 2021-10-17 17:45:23 · 2154 阅读 · 1 评论 -
RocketMQProducer三种发送方式以及入门Demo
单向(OneWay)发送Producer只要把消息往Mq里面一推,Producer就不管了,至于消息是否成功到达MQ,Producer不管,这种吞吐量是最高的,package org.apache.rocketmq.example.simple;import org.apache.rocketmq.client.exception.MQClientException;import org.apache.rocketmq.client.producer.DefaultMQProducer;原创 2021-10-17 17:44:05 · 818 阅读 · 0 评论 -
kafka vs rabbitmq vs rocketmq对比
文章出自出自 图灵学院四期课件讲义 kafka vs rabbitmq vs rocketmq.pdfRocketMQ淘宝内部的交易系统使用了淘宝自主研发的 Notify 消息中间件,使用 Mysql 作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011 年初,Linkin 开源了 Kafka 这个优秀的消息中间件,淘宝中间件团队在对 Kafka 做过充分 Review 之后,Kafka 无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息原创 2021-10-17 17:41:30 · 407 阅读 · 0 评论 -
RocketMQ启动停止 NameServer和Broker
要关闭RocketMQ服务可以通过mqshutdown脚本直接关闭# 1.关闭NameServersh bin/mqshutdown namesrv# 2.关闭Brokersh bin/mqshutdown broker原创 2021-10-17 15:06:02 · 3577 阅读 · 1 评论 -
Linux执行RocketMQ的官方示例测试集群是否好用
先说结论发送消息:默认会发1000条消息sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer接收消息:sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer上面这两个命令需要在RocketMQ的安装目录下去执行,另外需要配置环境变量:export NAMESRV_ADDR='zjj101:9876;zjj102:9876;zjj103:9876'原创 2021-10-17 13:45:59 · 1103 阅读 · 0 评论 -
Linux搭建 RocketMQ 2主2从集群
前置条件1.配置jdk1.8 环境变量 ,如果没配置的话参考这个博客去配置: https://blog.csdn.net/qq_41489540/article/details/1163997102.集群批量执行命令的脚本,看这个博客去整一个:https://blog.csdn.net/qq_41489540/article/details/109094840为什么让整这个脚本呢?原因是集群集群很多,如果你一个一个去执行命令安装的话,会累死你的.弄了这个脚本之后就可以实现在一台机器敲完命令之后,集群原创 2021-10-17 13:30:08 · 569 阅读 · 0 评论 -
windows版本rocketmq-console 可视化插件安装
windows版本RocketMQ之rocketmq-console可视化插件安装1.下载项目git地址 https://github.com/apache/rocketmq-externals码云地址 https://gitee.com/mirrors/RocketMQ-Externals或者从我的码云地址下载下: https://gitee.com/zjj19941/rocketmq-externals-master2.修改配置进入 E:\rocketmq-externals-ma原创 2021-10-17 12:45:37 · 1201 阅读 · 4 评论 -
Linux写了个非常简单的集群启动RocketMQ的NamesrvStartup脚本
前置条件需要 ssh免密登录 : 不会配置的话看 https://blog.csdn.net/qq_41489540/article/details/109091590配置好了 RocketMQ的环境变量 ,不会配置的话, 看https://blog.csdn.net/qq_41489540/article/details/115599542博客里面有一小段是配置环境变量的配置hosts目录:不会配的看这里 :https://blog.csdn.net/qq_41489540/article/det原创 2021-10-17 12:28:44 · 236 阅读 · 0 评论 -
RocketMQ可靠异步发送代码
import org.apache.rocketmq.client.exception.MQClientException;import org.apache.rocketmq.client.producer.DefaultMQProducer;import org.apache.rocketmq.client.producer.SendCallback;import org.apache.rocketmq.client.producer.SendResult;import org.apache..原创 2021-04-11 16:41:02 · 320 阅读 · 0 评论 -
RocketMQ可靠同步发送代码
import org.apache.rocketmq.client.producer.DefaultMQProducer;import org.apache.rocketmq.client.producer.SendResult;import org.apache.rocketmq.common.message.Message;import org.apache.rocketmq.remoting.common.RemotingHelper;/** * 同步发送 */public clas.原创 2021-04-11 16:24:35 · 216 阅读 · 0 评论 -
RocketMQ单向发送demo
import org.apache.rocketmq.client.producer.DefaultMQProducer;import org.apache.rocketmq.common.message.Message;import org.apache.rocketmq.remoting.common.RemotingHelper;/** * 单向发送 */public class OnewayProducer { public static void main(String[] ar.原创 2021-04-11 16:12:43 · 187 阅读 · 0 评论 -
RocketMQ之rocketmq-console可视化插件安装
1.下载项目git地址 https://github.com/apache/rocketmq-externals码云地址 https://gitee.com/mirrors/RocketMQ-Externals2.修改配置进入 RocketMQ-Externals\rocketmq-console\src\main\resources 中打开 application.properties由于我的是本地windows开发搭建,所以直接填写了本地路径3.编辑项目进入 RocketM原创 2021-04-11 15:05:39 · 1049 阅读 · 3 评论 -
Linux安装启动RocketMQ单机版demo
安装前准备运行前确保:已经有jdk1.8记得Linux上修改文件权限:命令如下:chmod -R 777 /home/linux这里准备的是rocketmq-all-4.4.0-bin-release.zip 安装包给安装包放到 /root/soft 目录下面 解压.如果不会解压zip文件看这里:https://blog.csdn.net/qq_41489540/article/details/109239989配置环境变量修改"/etc/profile"文件#设置rocketmq环境原创 2021-04-11 14:59:51 · 376 阅读 · 0 评论