RocketMQ
文章平均质量分 58
RocketMQ
developer@liyong
GISer
展开
-
消息队列-RockMQ-事务消息收发实践
事务是一组操作组成,一个原子操作要么都成功,要么都失败。如果任务是在本地,比如操作数据库,可以把一组操作放到事务里面。但是发送消息是网络远程操作,怎么保证事务呢?正常的思路可能是先要用一张表来记录每一步骤的状态,然后监听这个状态来处理。举个常见的例子比如转账业务,我们发送一条消息到MQ,这条消息是远程累加B的余额,在累加B的余额之前我们要扣除A的余额扣除成功后这条消息才能到消费方执行真正的逻辑增加B的余额,这两个操作是一个事务操作。原创 2024-01-09 11:11:04 · 921 阅读 · 0 评论 -
消息队列-RockMQ-批量收发实践
比如网络带宽为可以支持一次性发送8M的数据包,如果数据包确定不会超过8M,那么我们可以除以每条消息的大小(粗略估算),然后会得到一个数值,这个数值再取70%-80%留一定的缓冲空间。发送消息是需要网络连接的如果我们单条发送吞吐量可能没有批量发送好。剖来那个发送可以减少网络IO开销,但是也不能一批次发送太多的数据,需要根据每条消息的大小和网络带宽来确定量的数目。如果我们一次性发送的数据超过了8M,就需要对这些消息进行分组发送,保证每一组的数据大小不超过8M,每一组发送的数量逻辑也是按照前面这样来计算。原创 2024-01-08 21:11:39 · 559 阅读 · 0 评论 -
消息队列-RocketMQ-概览与搭建
MessageQueue:消息队列,存储数据的一个容器(队列索引数据),默认每个 Topic 下有 4 个队列被分配出来存储消息。指定这个参数即可 -e “JAVA_OPT_EXT=-server -Xms1g -Xmx1g -Xmn512m”Subscription:订阅关系,消费者得知道自己需要消费哪个 Topic 下的哪个队列的数据。ConsumerGroup:众多消费者构成的整体或构成的集群,称之为消费者组。Message:消息,真正携带信息的载体概念。Consumer:消费者,负责消费消息。原创 2024-01-07 14:40:30 · 460 阅读 · 0 评论 -
消息队列-RockMQ-定时延时发送消息
消费者订阅tag为test-topic_str的消息。我们看到test-group里面的消息总共有16条。任务需要延迟一段时间再进行处理。原创 2024-01-09 11:22:28 · 685 阅读 · 1 评论 -
消息队列-RockMQ-顺序收发消息实战
这个时候我们可以往一个队列里面写入数据,也只选择一个消费者进行消费,那么这个时候肯定是由序的。可以解决上面我们这个场景,但是这样的解决方案不是最好的,降低了消费效率和吞吐量。通过上面的思考我知道其实保证每个任务内部有序就行了,那么如果我们每个任务的消息都路由到同一个队列岂不是就可以了吗?假如我们有三个任务,任务1ABC,任务2DQ,任务3NQR,ABC这些字母都代表一个业务消息都要按照自己的内部的顺序消费。启动类,这里开启了两个通道一个通道验证全局有序性,一个通道验证局部有序性。原创 2024-01-09 11:20:29 · 482 阅读 · 0 评论 -
消息队列-RockMQ-过滤发送消息实践
我们有这样一个需求,我们上面的消费组只想感知A类消息,下面的消费者组只想感知BC类的消息。这个时候就又有一个问题如果我们上面这个消费者组订阅了Tag1和Tag2的消息,下面订阅了Tag1和Tag3的消息。那么这个时候如果上面这个消费组的第二个消费者遇到了Tag1的消息岂不是就直接丢弃掉,同理下面也是,可能无形中丢失了一些消息。我这里测试得到的结果是始终消费不到TAG2的消息,如果你先启动消费者TAG2也就消费不到TAG1的消息,产生了消息丢失。我们可以通过||的方式订阅多个TAG。这种方式是基于我们使用。原创 2024-01-08 21:10:04 · 539 阅读 · 0 评论 -
消息队列-RockMQ-Demo案例&&拓展输入输出渠道
新建自定义Sink和Source 继承Sink 和 Source,原来的渠道也会保留。下面为一个Demo 生产者和消费者是一起的。原创 2024-01-09 11:24:21 · 404 阅读 · 0 评论 -
消息队列-RockMQ-单生产者多消费者
如果我们启动三个消费者,那么肯定是有一个消费者是要多消费数据的。当然实际生产我们可以和这个队列保持一致4个消费者组成一个消费者组进行消费。启动类,多个消费者的搭建方式可以通过-Dserver.port来启动多个应用。我们可以看到RocketMq默认是一个主题绑定了四个队列,原创 2024-01-09 11:18:42 · 559 阅读 · 0 评论 -
消息队列-什么是MQ?何时使用MQ?怎么选择MQ?
MessageQueue:就是消息 + 队列,任务+队列,指令 + 队列。功能:应用程序之间(生产者与消费者)的通信方式。原创 2024-01-07 11:49:13 · 519 阅读 · 0 评论 -
消息队列-RockMQ-消息的可靠性
处理,因为消费者有可能会消费多条数据(举一个典型的例子:就是并发消费的时,如果 offset 小的那条消息消费失败了,那即使 offset 大的那些消费成功了,那最后提交 offset 位移的时候,还是会将那个 offset 最小的成功值提交到 Broker 侧。Broker 突然 Crash:可以由刷盘策略来保证(同步刷盘不会丢消息,异步刷盘会丢失一点点消息)Broker 突然断电:其实还是可以由刷盘策略来保证(同步刷盘不会丢消息,异步刷盘会丢失一点点消息)也可以采用新的消费者组来进行重新消费。转载 2024-01-10 20:14:17 · 44 阅读 · 0 评论 -
消息队列-RockMQ-重试参数设置
如果发送失败,是否需要尝试发送到其他的 Broker 节点,就是没有特意的关注,到底是同步发送失败、还是异步发送失败,总之,只要是发送失败了后,看一看该变量,如果是 true 的话,那么就自动尝试将消息发送到其他的 Broker 节点。消费者比如消费消息的过程中发生了异常,希望再次消费。4 setRetryTimesWhenSendAsyncFailed:异步,参数默认值是2。3 setRetryTimesWhenSendFailed:同步,参数默认值是2。2 通过消费状态,设置过一会儿再重新消费。原创 2024-01-09 19:05:39 · 552 阅读 · 0 评论