Activemq JMS消息优先级对消息无效

Activemq JMS消息优先级对消息无效,activemq,hornetq,Activemq,Hornetq,我需要设置消息优先级,以便高优先级的消息在低优先级的消息之前被接收者使用 首先,我尝试使用message.setJMSPriority()方法设置优先级,但它在HornetQ和ActiveMQ中不起作用,因此,最后我使用setPriority()方法设置消息生成器的优先级,现在它工作正常 为什么Messsge.setJMSPriority()不能在任何JMS供应商实现中工作,为什么我们需要设置生产者的优先级而不是消息本身来设置消息的优先级?那么Messsge.setJMSPriority()方法

我需要设置消息优先级,以便高优先级的消息在低优先级的消息之前被接收者使用

首先,我尝试使用message.setJMSPriority()方法设置优先级,但它在HornetQ和ActiveMQ中不起作用,因此,最后我使用setPriority()方法设置消息生成器的优先级,现在它工作正常

为什么Messsge.setJMSPriority()不能在任何JMS供应商实现中工作,为什么我们需要设置生产者的优先级而不是消息本身来设置消息的优先级?那么Messsge.setJMSPriority()方法的用途是什么


如果您有任何建议或意见,我们将不胜感激。

要回答此问题,您只需阅读setJMSPriority方法的API文档,它会告诉您原因。以下是相关文本

设置此消息的优先级

JMS提供程序在发送消息时设置此字段。此方法可用于更改已接收消息的值


JMS提供程序(ActiveMQ、HornetMQ等)在发送时将生产者中的优先级设置为默认值4,或者设置为生产者要使用的任何值,因此在消息本身上发送前设置该值不会产生任何效果。

这是JMS规范要求

您应该更改消息生成器的优先级

msg.setJMSPriority(9);
在此代码中,消息优先级设置为9,表示这是一条高优先级消息。 但是,发送消息时,消息的优先级为4(正常 优先权)。原因是什么?与消息过期一样,JMS提供程序将查看 消息的消息优先级属性,并调用setJMSPriority方法 将消息放置在队列上。由于默认消息优先级为4(正常 优先级),消息优先级将不会设置为高优先级消息,正如开发人员最初打算的那样

与消息过期一样,有两种设置消息优先级的方法:您 可以调用MessageProducer(QueueSender或主题)上的setPriority()方法 或在发送邮件时设置邮件优先级:

//set the default message priority for all messages to 9 (high)
QueueSender qSender = qSession.createSender(requestQ);
qSender.setPriority(9);

qSender.send(msg1);
//this message is low priority
qSender.send(msg2, DeliveryMode.PERSISTENT, 1, 30000);
在本例中,msg1将以9(高优先级)的优先级发送,而msg2将以9(高优先级)的优先级发送 发送时优先级为1(低优先级)。

您可以读取JmsTemplate

一些JMS提供程序允许通过配置ConnectionFactory以管理方式设置默认QOS值。 检查isExplicitQosEnabled属性