苍穹MQ分区指南,绝不给你“添堵”

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

苍穹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分区指南,绝不给你“添堵”

苍穹开发者在使用MQ后,可能遇到这种场景:发送的消息总是处理不过来,业务逻辑总是会被阻塞很久,排查后发现消息正在处理,消息积压很多!...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息