MQ
文章平均质量分 75
不能吃辣的JAVA程序猿
且行且珍惜
展开
-
【RocketMQ 二十八】RocketMQ 消息查询
3种消息查询⽅式:Message Key & Unique Key & Message Id3种消息查询⼯具:命令⾏、管理平台、客户端API,且⽀持将查询到让特定/所有消费者组重新消费屏蔽Unique Key & Message Id区别,很多地⽅⼆者可以通⽤Message Key & Unique Key 需要使⽤到哈希索引机制,有额外的索引维护成本Message Id由Broker和commit log offset组成,属于精确匹配,查询效率更好。原创 2022-10-20 12:07:57 · 6322 阅读 · 1 评论 -
【RocketMQ 二十八】RocketMQ 消息堆积
⽣产者的⽣产速度 >> 消费者的处理速度⽣产者的⽣产速度骤增,⽐如⽣产者的流量突然骤增消费速度变慢,⽐如消费者实例 IO 阻塞严重或者宕机。原创 2022-10-20 11:29:59 · 1968 阅读 · 0 评论 -
【RocketMQ 二十七】RocketMQ 消费幂等
如果有⼀个操作,多次执⾏与⼀次执⾏所产⽣的影响是相同的,我们就称这个操作是幂等的。当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费⼀次的结果是相同的,并且多次消费并未对业务系统产⽣任何负⾯影响,那么这整个过程就可实现消息幂等。原创 2022-10-20 11:15:14 · 869 阅读 · 0 评论 -
RocketMQ 如何保证消息的不丢失(技术及业务双重保障)
注意:使用同步刷盘可以保证消息不丢失,同时 Topic 相对应的 queue 应该分布在集群中各个 master节点,而不是只在某各 master 节点上,否则,该节点宕机会对订阅该 topic 的应用造成影响。比如下面的代码示例,接收到MQ的消息后,我们开启一个新的线程处理业务逻辑,并异步返回一个成功标记。和kafka不一样,RocketMQ中并没有 master 选举功能,在RocketMQ集群中,1台机器只能要么是Master,要么是Slave,这个在初始的机器配置里面,就定死了的。原创 2022-09-02 15:21:32 · 523 阅读 · 0 评论 -
【RocketMQ 二十六】RocketMQ应用之死信队列
当一条消息初次消费失败,消息队列会自动进行消费重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息,此时,消息队列不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。这个队列就是死信队列(Dead-Letter Queue,DLQ),而其中的消息则称为死信消息(Dead-Letter Message,DLM)。...原创 2022-08-26 10:20:55 · 999 阅读 · 0 评论 -
【RocketMQ 二十五】RocketMQ应用之消息消费重试机制
对于顺序消息,当Consumer消费消息失败后,为了保证消息的顺序性,其会自动不断地进行消息重试,直到消费成功。消费重试默认间隔时间为1000毫秒。重试期间应用会出现消息消费被阻塞的情况。由于对顺序消息的重试是无休止的,不间断的,直至消费成功,所以,对于顺序消息的消费,务必要保证应用能够及时监控并处理消费失败的情况,避免消费被永久性阻塞。注意,顺序消息没有发送失败重试机制,但具有消费失败重试机制。原创 2022-08-25 16:20:47 · 682 阅读 · 0 评论 -
【RocketMQ 二十四】RocketMQ应用之消息发送重试机制
Producer对发送失败的消息进行重新发送的机制,称为消息发送重试机制,也称为消息重投机制。原创 2022-08-25 15:20:51 · 1933 阅读 · 0 评论 -
【RocketMQ 二十三】RocketMQ应用之消息过滤
i < 10;} }i < 10;} }原创 2022-08-25 11:16:22 · 354 阅读 · 0 评论 -
【RocketMQ 二十二】RocketMQ应用之批量消息
/ 消息列表分割器:其只会处理每条消息的大小不超4M的情况。// 若存在某条消息,其本身大小大于4M,这个分割器无法处理, // 其直接将这条消息构成一个子列表返回。并没有再进行分割 public class MessageListSplitter implements Iterator < List < Message > > {// 指定极限值为4M private final int SIZE_LIMIT = 4 * 1024 * 1024;原创 2022-08-24 18:09:19 · 409 阅读 · 0 评论 -
【RocketMQ 二十一】RocketMQ应用之事务消息
/ 回调操作方法 // 消息预提交成功就会触发该方法的执行,用于完成本地事务 @Override public LocalTransactionState executeLocalTransaction(Message msg , Object arg) {System . out . println("预提交消息成功:" + msg);原创 2022-08-23 11:06:22 · 996 阅读 · 4 评论 -
【RocketMQ 二十】RocketMQ应用之延时消息
i < 10;i ++) {// 指定消息延迟等级为3级,即延迟10s // msg.setDelayTimeLevel(3);// 输出消息被发送的时间 System . out . print(new SimpleDateFormat("mm:ss") . format(new Date()));} }原创 2022-08-17 17:31:16 · 1362 阅读 · 0 评论 -
【RocketMQ 十九】RocketMQ应用之顺序消息
顺序消息指的是,严格按照消息的发送顺序进行消费的消息(FIFO)。默认情况下生产者会把消息以Round Robin轮询方式发送到不同的Queue分区队列;而消费消息时会从多个Queue上拉取消息,这种情况下的发送和消费是不能保证顺序的。如果将消息仅发送到同一个Queue中,消费时也只从这个Queue上拉取消息,就严格保证了消息的顺序性。...原创 2022-08-17 16:06:22 · 276 阅读 · 0 评论 -
【RocketMQ 十八】RocketMQ应用之普通消息
/ 创建一个producer,参数为Producer Group名称// 指定nameServer地址// 设置当发送失败时重试发送的次数,默认为2次// 设置发送超时时限为5s,默认3s// 开启生产者// 生产并发送100条消息 for(int i = 0;i < 100;i++) {// 为消息指定key// 发送消息} // 关闭producer} }// 消息发送的状态SEND_OK, // 发送成功。...原创 2022-08-17 11:16:04 · 226 阅读 · 0 评论 -
【RocketMQ 十七】RocketMQ工作原理之消息的清理
1)对于RocketMQ系统来说,删除一个1G大小的文件,是一个压力巨大的IO操作。在删除过程中,系统性能会骤然下降。所以,其默认清理时间点为凌晨4点,访问量最小的时间。也正因如果,我们要保障磁盘空间的空闲率,不要使系统出现在其它时间点删除commitlog文件的情况。消息是被顺序存储在commitlog文件的,且消息大小不定长,所以消息的清理是不可能以消息为单位进行清理的,而是以commitlog文件为单位进行清理的。commitlog文件存在一个过期时间,默认为72小时,即三天。...原创 2022-08-17 10:14:50 · 794 阅读 · 0 评论 -
【RocketMQ 十六】RocketMQ工作原理之消息堆积与消费延迟
消息处理流程中,如果Consumer的消费速度跟不上Producer的发送速度,MQ中未处理的消息会越来越多(进的多出的少),这部分消息就被称为。消息出现堆积进而会造成消息的。原创 2022-08-16 17:29:32 · 2286 阅读 · 0 评论 -
【RocketMQ 十五】RocketMQ工作原理之消费幂等
当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消费并未对业务系统产生任何负面影响,那么这个消费过程就是消费幂等的。幂等:若某操作执行多次与执行一次对系统产生的影响是相同的,则称该操作是幂等的。在互联网应用中,尤其在网络不稳定的情况下,消息很有可能会出现重复发送或重复消费。如果重复的消息可能会影响业务处理,那么就应该对消息做幂等处理。...原创 2022-08-16 11:14:56 · 181 阅读 · 0 评论 -
【RocketMQ 十四】RocketMQ工作原理之offset管理
这里的offset指的是Consumer的消费进度offset。消费进度offset是用来记录每个Queue的不同消费组的消费进度的。根据消费进度记录器的不同,可以分为两种模式:本地模式和远程模式。原创 2022-08-16 10:36:36 · 2125 阅读 · 1 评论 -
【RocketMQ 十三】RocketMQ工作原理之订阅关系的一致性
订阅关系的一致性指的是,同一个消费者组(Group ID相同)下所有Consumer实例所订阅的Topic与Tag及对消息的处理逻辑必须完全一致。否则,消息消费的逻辑就会混乱,甚至导致消息丢失。原创 2022-08-16 10:07:35 · 326 阅读 · 0 评论 -
【RocketMQ 十二】RocketMQ工作原理之消息的消费
消费类型、消费模式、Rebalance机制、Queue分配算法、至少一次原则原创 2022-08-15 17:15:12 · 1173 阅读 · 0 评论 -
【RocketMQ 十一】RocketMQ工作原理之indexFile
除了通过通常的指定Topic进行消息消费外,RocketMQ还提供了根据key进行消息查询的功能。该查询是通过store目录中的index子目录中的indexFile进行索引实现的快速查询。当然,这个indexFile中的索引数据是在包含了key的消息被发送到Broker时写入的。如果消息中没有包含key,则不会写入。...原创 2022-08-10 16:46:02 · 504 阅读 · 0 评论 -
【RocketMQ 十】RocketMQ工作原理之消息生产及存储
路由表:实际是一个Map,key为Topic名称,value是一个QueueData实例列表。QueueData并不是一个Queue对应一个QueueData,而是一个Broker中该Topic的所有Queue对应一个QueueData。即,只要涉及到该Topic的Broker,一个Broker对应一个QueueData。QueueData中包含brokerName。简单来说,路由表的key为Topic名称,value则为所有涉及该Topic的BrokerName列表。...原创 2022-08-10 11:47:10 · 572 阅读 · 0 评论 -
【RocketMQ 九】mqadmin命令
在mq解压目录的bin目录下有一个mqadmin命令,该命令是一个运维指令,用于对mq的主题,集群,broker 等信息进行管理。原创 2022-08-10 11:14:26 · 1952 阅读 · 0 评论 -
【RocketMQ 八】集群搭建
这里要搭建一个双主双从异步复制的Broker集群。为了方便,这里使用了两台主机来完成集群的搭建。这两台主机的功能与broker角色分配如下表。原创 2022-08-09 17:22:51 · 271 阅读 · 0 评论 -
【RocketMQ 七】磁盘阵列RAID
1988 年美国加州大学伯克利分校的 D. A. Patterson 教授等首次在论文 “A Case of Redundant Array ofInexpensive Disks” 中提出了 RAID 概念 ,即廉价冗余磁盘阵列( Redundant Array of InexpensiveDisks )。由于当时大容量磁盘比较昂贵, RAID 的基本思想是将多个容量较小、相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量、性能、可靠性。随着磁盘成本和价格。...原创 2022-08-09 16:31:26 · 192 阅读 · 0 评论 -
【RocketMQ 六】集群搭建理论
复制策略是Broker的Master与Slave间的数据同步方式。异步复制策略会降低系统的写入延迟,RT变小,提高了系统的吞吐量。原创 2022-08-09 15:40:19 · 115 阅读 · 0 评论 -
【RocketMQ 五】RocketMQ 控制台的安装与启动
RocketMQ有一个可视化的dashboard,通过该控制台可以直观的查看到很多数据。原创 2022-08-09 09:55:34 · 713 阅读 · 0 评论 -
【RocketMQ 四】RocketMQ 单机安装及启动
系统要求是64位的,JDK要求是1.8及其以上版本的。原创 2022-08-08 11:30:34 · 375 阅读 · 0 评论 -
【RocketMQ 三】RocketMQ 的系统架构
NameServer是一个Broker与Topic路由的注册中心,支持Broker的动态注册与发现。RocketMQ的思想来自于Kafka,而Kafka是依赖了Zookeeper的。所以,在RocketMQ的早期版本,即在MetaQ v1.0与v2.0版本中,也是依赖于Zookeeper的。从MetaQ v3.0,即RocketMQ开始去掉了Zookeeper依赖,使用了自己的NameServer。Broker管理:接受Broker集群的注册信息并且保存下来作为路由信息的基本数据;...原创 2022-08-03 15:51:23 · 1634 阅读 · 0 评论 -
【RocketMQ 二】RocketMQ 的基本概念
消息是指,消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。原创 2022-08-03 14:33:00 · 157 阅读 · 0 评论 -
【RocketMQ 一】MQ概述
MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。原创 2022-08-03 11:39:11 · 226 阅读 · 0 评论 -
RocketMq 消费者 异常 订阅了,但是被过滤掉了;同一group,同一topic,同一tags
异常现象:mq消费者消费消息异常,显示订阅了,但是被过滤掉了;如下图:排查所有的group、topic、tags与生产者一致,无误。非常奇怪。后百度,有人说具体参考地址:https://blog.csdn.net/yangchenhui666/article/details/104587147我目前的环境中在同一个group、topic下有两个业务场景同时使用,只不过tags不同而已。个人解决办法:变更不同的group进行处理即可。...原创 2021-03-26 14:00:42 · 766 阅读 · 0 评论 -
RocketMqConsumer 消费者使用范例
首先先了解下DefaultMQPushConsumer 参数:https://blog.csdn.net/weixin_41715077/article/details/85170893以及消费模式:https://blog.csdn.net/qq_36804701/article/details/81481343简单例子package com.swk.springboot.rocketmq;import java.util.List;import org.apache.rocketmq.cl原创 2021-02-05 16:01:07 · 1423 阅读 · 0 评论 -
RocketMqProducer 消息生产者 定义范例
自定义选择器(可不定义)@Componentpublic class GenericQueueSelector implements MessageQueueSelector { @Override public MessageQueue select(List<MessageQueue> list, Message message, Object o) { long id = NumberUtils.toLong(String.valueOf(o));原创 2021-02-05 14:37:08 · 549 阅读 · 0 评论