作者:平头哥的技术我们知道 RocketMQ 是一款高性能、高可靠的分布式消息中间件,高性能和高可靠是很难兼得的。因为要保证高可靠,那么数据就必须持久化到磁盘上,将数据持久化到磁盘,那么可能就不能保证高性能了。RocketMQ 在兼容这两方面做的不错,先从磁盘说起,现代的磁盘都是高性能的,写速度并不一定比网络的数据传输速度慢。比如 SSD 固态硬盘在 M.2 NVMe协议下,顺序写的速度可以达到
1.1 消息重复消费其实这是一个常见的面试问题,既然是消费消息,那肯定是要考虑会不会重复消费?能不能避免重复消费?或者重复消费了也别造成系统异常可以吗?关于消息重复消费的问题,其实本质上就是问你使用消息队列如何保证幂等性。1.2 幂等性幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行
每隔5秒调用一次MQClientInstance.persistAllConsumerOffset()方法将消费进度向Broker同步。遍历MQClientInstance.consumerTable: ConcurrentHashMap<String/*group */, MQConsumerInner>变量。对于PushConsumer端和PullConsumer端,处理逻辑是一样
消息队列中间价都有哪些先进先出 Kafka、Pulsar、RocketMQ、RabbitMQ、NSQ、ActiveMQRabbitmq架构消费推拉模式客户端消费者获取消息的方式,Kafka和RocketMQ是通过长轮询Pull的方式拉取消息,RabbitMQ、Pulsar、NSQ都是通过Push的方式。pull类型的消息队列更适合高吞吐量的场景,允许消费者自己进行流量控制,根据消费者实际的消费能力
浅浅的记录一个线上曾发生的问题和排查方向曾经遇到过一个需求,上线后MQ消息突然呈几何备注递增,随后把整个CPU直接吃满,后来我排查的时候发现,一个新的消费者,订阅一个已存在的topic的时候,使用了默认的策略。rocketMQ 的消费者组决定她从何处开始i消费,从最大偏移量还是 从头开始还是怎么的,是由DefaultMQPushConsumer的setConsumeFromWhere(Consum
转载 2024-09-09 00:43:55
105阅读
小编有两位朋友分别是小A和小B:小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就是和运营聊聊天,写几个SQL,生成下报表。又或者接到客服的通知,某某功能故障了,改改数据,然后下班部署上线。每天过的都是这种生活,技术零成长。小B,工作于某国企,虽然能接触到一些中间件技术。然而,他只会订阅/发布消息。通俗点说,就是调调API。对为什么使用这些中
转载 2024-09-07 15:28:52
45阅读
RocketMQ发送普通消息的所有方法以及代码示例一、使用RocketMQTemplate发送消息(整合Springboot)(1)void send(Message\<?\> message) throws MessagingException;同步发送(2)void send(D destination, Message\<?\> message) throws Me
转载 2024-10-09 07:35:55
272阅读
在RocketMQ4.3.0版本后,开放了事务消息这一特性,对于分布式事务而言,最常说的还是二阶段提交协议,那么RocketMQ的事务消息又是怎么一回事呢,这里主要带着以下几个问题来探究一下RocketMQ的事务消息:  事务消息是如何实现的  我们有哪些手段来监控事务消息的状态  事务消息的异常恢复机制  RocketMQ的事务消息是如何实现的RocketMQ作为一款消息中间件,主要作用就是帮助
转载 10月前
78阅读
POP 作为一种全新的消费模式,解决了 Push 模式的一些痛点,使客户端无状态,更加轻量,消费逻辑也基本都收敛到了 Broker,对多语言的支持十分的友好。在 API 层面也与 Push 完成了融合,继承了 Push API 的简单易用,同时实现了 Push,POP 之间的自由切换。 作者:凯易&耘田前言:随着 RocketMQ 5.0 pre
转载 2024-03-15 21:21:45
110阅读
消息队列在执行过程中, 如何统计消息队列执行一轮的时间以及效率呢? 如果消息队列中的任务变多, 则需要对应增加消费进程, 保证队列不被堆积。一、一般消息队列生产和消费类型1. 一次性任务消费从某个地方一次性写入多个任务到队列, 消费完成后就算完成2. 不断写入的任务消费一般是判断队列任务少了, 就开始写入任务, 队列任务足够则不写入任务。对应的消费进程也是持久性进程。3. 有任务则写入, 然后持续
一、需求:比如我消费1000个队列。我将速度等级分为100个等级。1倍速,每小时消费800个。100倍速就是每小时消费 800*100个。这样就可以计算每个队列的消费间隔,比如1倍速间隔是 4500 毫秒。100倍速就是 45毫秒。1倍速要搞这个间隔,没问题。100倍速,45毫秒,这个就有大问题了。你想想,分布式系统,如何控制所有服务器间隔45毫秒去消费一个消息?就算可以实现,性能也是大打折扣的。
一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬1.什么是消息队列?可以看作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ。 通过提供 消息传递 和 消息排队 模型,它可以在 分
转载 2024-06-20 10:08:23
110阅读
RabbitMQ高级特性消费限流什么是消费端限流场景:假设MQ服务器接收很多未处理的消息,这些消息会瞬间打在消费者客户端,当接收到如此巨量的消息客户端是无法处理的,所以就需要在MQ和消费者之间做个限流,在消费者进行消费时限制消费流量解决方案:RabbitMQ提供了一种qos(服务质量保证)功能,在非自动确认消息的前提下,设置channel或queue的预处理流量,进而来限流,方法如下:void B
消息重试Rocketmq提供了消息重试机制,这是一些其他消息队列没有的功能。我们可以依靠这个优秀的机制,而不用在开发中增加更多的业务代码去实现Consumer 消费消息失败后,要提供一种重试机制,令消息消费一次。Consumer 消费消息失败通常可以认为有以下几种情况由于消息本身的原因,例如反序列化失败,消息数据本身无法处理(例如话费充值,当前消息的手机号被注销,无法充值)等。 这种错误通常需
转载 10月前
49阅读
1. 概念  Producer端重试:  生产者端的消息失败,也就是Producer往MQ上发消息没有发送成功,比如网络抖动导致生产者发送消息到MQ失败。 这种消息失败重试我们可以手动设置发送失败重试的次数。  Consumer端重试:  Consumer消费消息失败后,要提供一种重试机制,令消息消费一次,Consumer消费消息失败通常可以认为有以下几种情况  1. 由于消息本身的原
转载 7月前
87阅读
RocketMQ使用过程中,如何进行消息重试。首先,我们需要明确,只有当消费模式为 MessageModel.CLUSTERING(集群模式) 时,Broker才会自动进行重试,对于广播消息是不会重试的。集群消费模式下,当消息消费失败,RocketMQ会通过消息重试机制重新投递消息,努力使该消息消费成功。当消费消费该重试消息后,需要返回结果给broker,告知broker消费成功(Consume
转载 2024-06-17 13:36:31
87阅读
一、顺序消息 消息有序指的是可以按照消息的发送顺序来消费。例如:一笔订单产生了 3 条消息,分别是订单创建、订单付款、订单完成。消费时,要按照顺序依次消费才有意义。与此同时多笔订单之间又是可以并行消费的。首先来看如下示例:假如生产者产生了2条消息:M1、M2,要保证这两条消息的顺序,应该怎样做?你脑中想到的可能是这样: 你可能会采用这种方式保证消息顺序 假定M1发送到S1,M2发送到S2,如
在我的职场经历中,使用 `RocketMQ` 与 `Spring Boot` 进行消息发送和消费的经验让我感受到这一技术的强大。因此,我决定将这一过程记录一下,特别是如何通过 `java rocketMQTemplate` 发送和消费消息的详细步骤。下面,我将从环境准备开始,逐步指导如何完成这一过程。 ### 环境准备 在开始之前,首先要准备相应的软硬件环境。以下是所需的基本环境信息: ##
原创 7月前
55阅读
概述分别从Producer发送机制、Broker的持久化机制,以及消费者的offSet机制来最大程度保证消息不易丢失从Producer的视角来看:如果消息未能正确的存储在MQ中,或者消费者未能正确的消费到这条消息,都是消息丢失。从Broker的视角来看:如果消息已经存在Broker里面了,如何保证不会丢失呢(宕机、磁盘崩溃)从Consumer的视角来看:如果消息已经完成持久化了,但是Consume
转载 2024-09-12 10:10:05
187阅读
一、为什么会出现消息乱序消费先来看生产者,rocketmq的一个主题下可以创建多个队列,默认情况下生产者将消息轮询发送到各个不同的队列上,这就导致本来需要有序的多个消息进入了不同队列。 下面再来看一下消费者。如果消费者使用的是DefaultMQPushConsumer,下面分两种情况来看: (1)、一种该消费组内只有一个消费者,所有的消息都会发送到该消费者,DefaultMQPushConsume
转载 2024-07-01 09:50:42
126阅读
  • 1
  • 2
  • 3
  • 4
  • 5