消息处理优先级

Kar*_*ilz 6 java message-queue

在Java Web应用程序中,我有一个类型为A的重复消息加载(例如,每小时20,000个).然后我有第二种类型的消息(类型B)偶尔显示但具有比类型A更高的优先级(例如,3,000).我希望能够使用开源软件在一台或多台机器上处理这些消息.

在我看来,如果我有一个基于优先级从其队列发送消息的JMS服务器,我可以用JMS做到这一点(例如,发送三个类型B的消息,然后发送一个类型A的消息,即使类型A的所有消息都是在消息队列的顶部).

您是否知道可以执行此操作的JMS服务器 - 或者您是否知道另一种实现方法?

Uri*_*Uri 6

JMS标准支持消息优先级默认为4,您可以指定其他优先级.我认为你需要在消息生成器和消息本身中设置它(两者都有方法).

我认为ActiveMQ确实支持它.

但是,默认情况下,许多JMS代理都禁用了优先级处理.您可能需要更改一个标志,例如"supportJMSPriority",在代理配置中的某个位置.

此外,Apache Camel允许您编写自己的消息重新排序器,以便您可以实现您想要的任何形式的优先级.


Jam*_*hek 2

当您在 MessageProducer(QueueSender 等)上调用“send(..)”时,设置消息优先级。或者,您可以在 MessageProducer 上设置默认优先级,范围为 0-9(9 最高)。设置消息本身的优先级是行不通的。它被生产者覆盖。

Uri 是正确的——是否尊重优先级是特定于实现的。我相信 OpenJMS 通常尊重开箱即用的优先级,但不保证它。

JMS 规范规定:"JMS does not require that a provider strictly implement priority ordering of messages; however, it should do its best to deliver expedited messages ahead of normal messages."