RocketMQ-如何保证顺序消息

1. 简介

实际开发中会有以下场景,需要保证一组消息的生产顺序与消费顺序相同,例如

  1. 监听数据库表单条数据的的多次修改,需要保证监听者最终得到的消息顺序和数据库表对单条数据的修改顺序一样
  2. 网购平台创建订单的过程一般都是异步实现,订单创建和支付流程需要保证最终到服务器的顺序一致

那么在 RocketMQ 中该如何保证消息的顺序呢?

2. RocketMQ 中该如何保证消息的顺序呢?

首先查看一条消息从生产者到消费者的流程:

image.png

  • 生产者: 生产者可以有多个 每个生产者可以向 topic 的任意队列写数据
  • 消费者 消费者存在于消费者组当中,消费者组可以存在多个消费者 每一个队列在同一时间只能被同一消费者组内的一个消费者消费,但是同一消费者可以同时消费多个队列

想要保证消息的顺序需要满足以下条件:

  1. 生产者生产消息保证顺序一致
  2. 生产者生产的消息最终到达 broker 且被处理的顺序一致
  3. broker 保证先后到达消息最终处理的结果顺序一致
  4. 消费者可以按照固定顺序去拉取并处理消息

下面我们以一条订单的创建看满足这些条件需要做些什么: 假设一条订单从创建到支付有四个节点,创建订单、提交支付、支付、支付成功

  1. 用户在页面操作可以保证四个节点必定是按照固定顺序去生产的四条消息,但是最终到达 broker 的顺序却不一定按照生产者发起消息请求到 broker 的顺序,因为网络交互过程是存在不确定性的,先出发的可能后到,后出发的可能先到。

    image.png

  2. 所以在生产者发送消息时需要由生产者去保证消息顺序,在创
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RocketMQ是一款开源的分布式消息队列系统,而rocketmq-client-javaRocketMQJava客户端。 rocketmq-client-java提供了丰富的API,使得开发者可以方便地使用RocketMQ进行消息的发布和订阅。它支持多种消息发送模式,包括同步发送、异步发送和单向发送。同步发送保证消息的可靠性和顺序性,异步发送提高了发送效率,而单向发送则不需要等待服务器的响应。此外,rocketmq-client-java还支持批量发送和延迟发送等特性,满足了不同场景下的需求。 rocketmq-client-java提供了多种消息消费模式,包括集群模式和广播模式。在集群模式下,多个消费者可以共同消费一个队列的消息,实现消息的负载均衡和高可用性;而在广播模式下,每个消费者都能收到所有队列的消息,适用于需要实时获得消息的场景。 rocketmq-client-java还提供了自动负载均衡和故障转移的功能。当消费者增减或者下线时,RocketMQ会自动进行负载均衡,保证每个消费者都能平均地消费消息。而当某个消费者出现故障时,RocketMQ会将该消费者的消息重新分配给其他正常工作的消费者,保证消息的可靠性和高可用性。 此外,rocketmq-client-java还支持消息过滤、消息事务和顺序消息等高级特性。消息过滤可以根据指定的条件对消息进行过滤,只消费符合条件的消息消息事务可以保证消息的原子性,要么一起成功,要么一起失败。顺序消息可以保证按照发送顺序进行消费,避免了消息的乱序问题。 综上所述,rocketmq-client-javaRocketMQJava客户端,提供了丰富的API和多种特性,使得开发者可以方便地使用RocketMQ进行消息的发布和订阅,并满足不同场景下的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值