[译]JMS 消息优先级
我们将通过示例详细讨论 JMS 消息优先级。每条消息的标头字段代表其优先级。我在消息模型教程JMSPriority中讨论过消息优先级。
JMS 有 10 个优先级,从 0 到 9。0 是最低优先级,9 是最高优先级。根据 JMS 标准,优先级为 0-4 的消息为正常优先级,优先级为 5-9 的消息被视为加急优先级。
JMS 优先级示例
在下面的例子中,具有不同优先级的消息被发送给接收方。但是,优先级最高的消息(9)最先到达,同样,优先级最低的消息最后到达。
package lab01.message.model;
import labxx.common.settings.CommonSettings;import javax.jms.*;
public class MessagePriorityTest { public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = CommonSettings.getConnectionFactory(); Queue queue = CommonSettings.getDefaultQueue();
try (JMSContext jmsContext = connectionFactory.createContext()) { JMSProducer producer = jmsContext.createProducer(); String[] messages = {"Msg One", "Msg two", "Msg three", "Msg four", "Msg five"};
producer.setPriority(0).send(queue, messages[0]); producer.setPriority(9).send(queue, messages[1]); producer.setPriority(4).send(queue, messages[2]); producer.setPriority(2).send(queue, messages[3]); producer.send(queue, messages[4]);
JMSConsumer consumer = jmsContext.createConsumer(queue); for (int i = 0; i < messages.length; i++) { Message message = consumer.receive(); System.out.println("Priority: " + message.getJMSPriority() + " #### Message: " + message.getBody(String.class)); } } }}输出
Priority: 9 #### Message: Msg twoPriority: 4 #### Message: Msg threePriority: 2 #### Message: Msg fourPriority: 2 #### Message: Msg fivePriority: 0 #### Message: Msg OneJMS 消息默认优先级
即使您不指定消息优先级,JMS 也会为每条消息分配一个默认优先级。查看下面的代码示例,您可以在输出中看到每条消息的优先级为 4。
package lab01.message.model;
import labxx.common.settings.CommonSettings;import javax.jms.*;
public class MessageDefaultPriorityTest { public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = CommonSettings.getConnectionFactory(); Queue queue = CommonSettings.getDefaultQueue();
try (JMSContext jmsContext = connectionFactory.createContext()) { JMSProducer producer = jmsContext.createProducer(); String[] messages = {"Msg One", "Msg two", "Msg three", "Msg four", "Msg five"};
producer.send(queue, messages[0]); producer.send(queue, messages[1]); producer.send(queue, messages[2]); producer.send(queue, messages[3]); producer.send(queue, messages[4]);
JMSConsumer consumer = jmsContext.createConsumer(queue); for (int i = 0; i < messages.length; i++) { Message message = consumer.receive(); System.out.println("Default Priority: " + message.getJMSPriority() + " #### Message: " + message.getBody(String.class)); } } }}输出
Default Priority: 4 #### Message: Msg OneDefault Priority: 4 #### Message: Msg twoDefault Priority: 4 #### Message: Msg threeDefault Priority: 4 #### Message: Msg fourDefault Priority: 4 #### Message: Msg five这些都是 JMS 优先级消息的一部分,您已经了解了如何分配自定义优先级来控制消息传递。