苍穹MQ分区指南,绝不给你“添堵”
苍穹开发者在使用MQ后,可能遇到这种场景:发送的消息总是处理不过来,业务逻辑总是会被阻塞很久,排查后发现消息正在处理,消息积压很多!特别针对多种类型消息共用一个消息队列时,更为明显。
遇到这种情况,不用着急,本期文章带你上手MQ消息分区,再也不用因消息阻塞而烦恼~
1 场景痛点
MQ消息队列中间件是苍穹系统重要的组件,主要解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。
MQ消息分区用于处理以下典型场景:多种类型的业务集中处理,如财务、供应链、HR均发起工作流任务,工作流引擎使用MQ,将消息全交给工作流服务所在应用来处理,在HR应用工作流业务突增的情景下,势必会造成供应链和财务工作流业务阻塞,如图所示。
场景示意图
2 解决方案
使用MQ队列分区功能,把不同应用的消息分流处理,这样用户不需要额外申明队列就能让各应用的消息在消费时不会相互阻塞,并能均衡系统消费压力。
2.1 队列分区介绍
苍穹使用MQ功能,队列和消费者是“静态创建的”,需要提前配置,而队列分区是“动态的”,可以在系统运行期创建队列和消费者,通过对队列不同维度的分区达到负载均衡的效果。
2.2 队列分区维度
① appId分区
消息按照appId发布到queueName.appId队列,并由appId节点进行消费。
② hash分区
按照消息的Hash值进行分区,敬请期待……
3 使用指南
3.1 配置MQ队列
<region name="workflow" appid="wf"> <queue name="kd.bos.bec.engine.job_queue"> <consumer class="kd.bos.bec.engine.consumer.BizEventConsumer" concurrency="5"></consumer> </queue> </region>
3.2 创建分区发布器,并按appId发布
MessagePublisher pub=MQFactory.get().createPartitionPublisher(“workflow”, “kd.bos.bec.engine.job_queue”,PartitionStrategy.APP_ID); pub.publish(message,appid) //按appid发布-即发布到workflow.kd.bos.bec.engine.job_queue.appid队列,由appid应用的消费者消费
4 使用效果
用户只需申明A队列,通过使用appId分区功能,实现队列负载均衡,做到不同应用的消息,由不同的应用消费,互不干扰。
分区示意图
5 划重点
苍穹开发者在使用MQ后,可能遇到这种场景:发送的消息总是处理不过来,业务逻辑总是会被阻塞很久,排查后发现消息正在处理,消息积压很多!特别针对多种类型消息共用一个消息队列时,更为明显。
针对上述场景,可使用MQ队列分区功能解决,通过把不同应用的消息分流处理,用户不需要额外申明队列就能让各应用的消息,消费时不会相互阻塞,并能均衡系统消费压力。
#往期推荐#
更多精彩内容,“码”上了解!↓
苍穹MQ分区指南,绝不给你“添堵”
本文2024-09-23 00:20:34发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-138856.html