如何对不同队列上的消息进行优先级排序?
Posted
技术标签:
【中文标题】如何对不同队列上的消息进行优先级排序?【英文标题】:How can I prioritize messages on different queues? 【发布时间】:2012-02-06 18:52:28 【问题描述】:资源分配/优先级问题。
我正在开发一个 Java EE 应用程序,该应用程序有许多消息驱动 Bean (MDB),它们从不同的 JMS 队列接收消息,为了简单起见,假设队列 A/MDB A 和队列 B/MDB B。
当负载很高时,系统需要优先考虑队列 A 中的消息,而不是队列 B 中的消息。为什么?队列 A 上的消息需要尽快处理,因此 MDB A 需要“所有”数据库、cpu 资源等。
您对如何以干净的方式解决此问题有任何建议吗?不那么干净也可以...
我的生产服务器是 WebSphere Application Server 7,使用 SIBus 进行消息传递。 WebSphere MQ 可能是一种选择。
感谢您的任何建议!
【问题讨论】:
不是 100% 确定,但 JMS 消息优先级不应该处理吗? (我不确定优先级是按队列处理还是按消息传递引擎处理) @AviramSegal 我假设 JMS 消息优先级是按队列处理的,但现在我有疑问。我真的找不到这个问题的答案...... 规范不是很清楚,今天晚些时候我会尝试验证fornyou 【参考方案1】:在与该领域的专家一起调查此问题后,我得到了一些坏消息:
这可能做不到。
使用 SIB 无法做到 100%,您只能对单个目标中的消息进行优先级排序。
关于 WebSphere MQ,似乎也做不到,它们唯一的队列优先级属性是在处理集群中的单个队列时,我想这对您没有帮助。
因此,遗憾的是,这可能无法完成,如果您需要优先处理消息,您可能需要稍微更改架构。 也许是一个带有选择器的队列。然后,您可以优先处理某种类型的消息。
【讨论】:
谢谢!这是我认为的,所以没有什么大问题。当队列深度达到某个队列的阈值时,我正在通过暂时暂停 MDB 来解决这个问题(您可能已经猜到 ***.com/questions/8819169/…)以上是关于如何对不同队列上的消息进行优先级排序?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我需要在 C++ 中使用不同的排序格式来对这个 USACO 代码上的数组和优先级队列进行排序?