如何对不同队列上的消息进行优先级排序?

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 代码上的数组和优先级队列进行排序?

如何防止 ActiveMQ 优先队列上的低优先级消息被饿死?

如何使用优先队列对链表进行排序

消息队列介绍

如何使用优先队列根据键值对的值进行排序

简单了解几种阻塞队列