当前位置: 首页 > wzjs >正文

网站开发北京公司网页设计导航栏尺寸

网站开发北京公司,网页设计导航栏尺寸,删除wordpress修订版本号,萧山建设有限公司网站在消息队列(MQ)中保证消息的顺序性是一个常见的需求,尤其是在需要严格按顺序处理业务逻辑的场景(例如:订单创建 → 支付 → 发货)。 一、消息顺序性被破坏的原因 生产者异步/并行发送:消息可能…

在消息队列(MQ)中保证消息的顺序性是一个常见的需求,尤其是在需要严格按顺序处理业务逻辑的场景(例如:订单创建 → 支付 → 发货)。在这里插入图片描述

一、消息顺序性被破坏的原因

  1. 生产者异步/并行发送:消息可能以不同顺序到达MQ。
  2. MQ的分区/队列机制:消息被分散到不同分区或队列,不同队列的消费速度不一致。
  3. 消费者并行消费:多个消费者实例或线程同时处理消息,导致乱序。

二、保证消息顺序性的核心方案

核心原则将需要顺序处理的消息路由到同一个队列(或分区),并由单线程顺序消费

1. 生产者保证消息路由到同一队列
  • 业务标识路由:将同一业务标识(如订单ID、用户ID)的消息通过相同的路由键(如哈希取模)发送到同一个队列。

  • Kafka:为消息指定相同的 Key,相同 Key 的消息会进入同一个分区或者发送消息时将同一业务的消息指定到同一个分区partition

//指定分区 0
kafkaTemplate.send("kafka=topic", 0, "key-001", "value-0001");//相同业务key  key-001
kafkaTemplate.send("kafka=topic", "key-001", "value-0001");
  • RocketMQ:使用 MessageQueueSelector 自定义队列选择逻辑,确保同一业务的消息进入同一队列。
SendResult sendResult = producer.send(msg, new MessageQueueSelector() {@Overridepublic MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {Integer id = (Integer) arg;int index = id % mqs.size();return mqs.get(index);}
}, orderId);
2. MQ服务端维护队列顺序
  • 分区/队列内有序:MQ需保证单个分区或队列内消息的存储和投递顺序与发送顺序一致。
  • 限制:Kafka分区、RocketMQ队列默认保证分区/队列内消息顺序。
3. 消费者单线程顺序消费
  • 单线程消费:消费者对同一队列的消息使用单线程处理,避免并发导致的乱序。
  • 示例
    • Kafka:每个分区仅由一个消费者线程处理,天生就是单线程的。
    • RocketMQ:使用 MessageListenerOrderly 监听器顺序消费。
  • 代码示例(RocketMQ消费者)
    consumer.registerMessageListener(new MessageListenerOrderly() {@Overridepublic ConsumeOrderlyStatus consumeMessage(List<MessageExt> messages, ConsumeOrderlyContext context) {// 单线程处理消息return ConsumeOrderlyStatus.SUCCESS;}
    });
    
4. 失败重试不破坏顺序
  • 顺序消费的重试机制:若某条消息消费失败,需阻塞后续消息处理,直到当前消息成功。
  • 示例:RocketMQ在顺序消费模式下,失败时会重试当前消息,后续消息需等待。

三、不同MQ的实现差异

消息队列顺序性支持关键配置
Kafka分区内顺序保证相同Key的消息发送到同一分区
RocketMQ队列内顺序保证(需使用顺序消息API)MessageListenerOrderly + 队列选择器
RabbitMQ无原生支持,需通过单队列+单消费者模拟顺序性单一队列 + 单消费者线程(synchronized

四、注意事项

  1. 性能与扩展性:顺序性会牺牲并行度,可通过增加队列/分区数量横向扩展(不同业务标识分散到不同队列)。
  2. 全局顺序性:需所有消息进入同一队列(如Kafka单分区),但会严重限制吞吐量,通常不建议。
  3. 业务设计:仅在必要场景(如订单链路)启用顺序性,其他场景尽量允许乱序。

五、总结

1. 保证消息顺序性的核心步骤:

  • . 生产者:按业务标识将消息路由到同一队列。
  • . MQ服务端:确保队列内消息存储有序。
  • . 消费者:单线程消费队列,失败时阻塞重试。
    通过合理设计业务标识和MQ配置,可以在分布式系统中高效实现局部顺序性,平衡一致性与性能。

2. 不同MQ如何选择

三种MQ相比较而言,RocketMQ更适合顺序消费的业务场景,总结如下:

  • . RabbitMQ需要设定交换机Exchange与队列Queue的绑定关系,并且一个队列只对应一个消费者Consumer才可以保证顺序消费,但是队列中的消息被消费者拉去后会从队列删除,如果消息消费失败,重试时会重新入队,消息的顺序就打乱了。
  • . Kafka虽然可以实现分区顺序消费但是在消息失败时,并不会锁住整个partition分区,该消息之后的消息还是会被消费,顺序也就打乱了,顺序消费的设计并没有RocketMQ那么完善。
  • . RocketMQ使用顺序发送,并结合队列选择器可以将同一业务消息发送到同一个队列,再结合MessageListenerOrderly监听器,保证生产者发送顺序和队列存储顺序以及消费者消费消息一致,并且消费失败时,会返回SUSPEND_CURRENT_QUEUE_A_MOMENT状态,阻塞队列一段时间(因为有队列锁),之后会从失败处开始再次消费。

RocketMQ顺序消费实现机制参考链接:https://blog.csdn.net/m0_71845127/article/details/145990210

http://www.dtcms.com/wzjs/820344.html

相关文章:

  • 保定做网站的公司win7局域网网站开发
  • 建设厅副厅长中山百度seo
  • 开发app的网站粤健康app下载
  • 公司网站忘了怎么做建设公司网站建设报价
  • 自学php制作网站有哪些软件网站建设推广平台网址
  • 河北网站建设公司巴彦淖尔网站建设
  • 企业网站seo案例分析微信号管理系统
  • 修改网站后台地址华建河北住房和城乡建设厅网站
  • 那些网站做的比较好品牌建设再发力
  • 怎么利用婚庆网站做营销大连做网站大公司
  • 福州网站建设好的公司外包网络安全管理制度
  • 免费建网站广告语搜索网站定制公司
  • 淄博建网站多少钱网站如何做支付系统
  • 建网站用什么工具网站建设说明书模板
  • 高端网站搭建做网站如何使用特殊字体
  • 江西省美丽乡村建设公布网站什么网站可以查建筑工程项目
  • 做计算机网站的总结都匀网站建设
  • asp化妆品网站 后台河北教育网站建设
  • 宝安网站设计流程网站设计应遵循的原则
  • 临沂企业建站系统模板阳江市住房和城乡建设局网站
  • 医疗企业网站模板下载 app
  • 网站dns查询免费好用的服务器
  • seo网络营销案例分析长沙官网优化多少钱
  • 想找人做网站联盟网站做任务
  • 免费海报模板网站电商网站设计趋势
  • 做网站天通苑颜色选取网站
  • 学生做的网站需要备案wordpress 显示微博
  • 海珠做网站公司怎么做外贸网站seo
  • 广州佛山网站建设地址做网站包括哪些
  • 深圳企业网站建设标准网站开发 软文