我有一个代码,将读取器挂在队列上,并在方法完成时接收消息。我想不是从队列的开头接收消息,而是从队列的末尾或中间接收消息
private void getMessage() throws JMSException, NamingException {
Queue queue = (Queue) initialContext.lookup("dynamicQueues/" + "TestQueue");
if (messageConsumer == null){
messageConsumer = queueSession.createConsumer(queue);
}
TextMessage message = (TextMessage) messageConsumer.receive();
String msgBody = ((TextMessage) message).getText();
System.out.println(msgBody);
}
JMS 队列的基本语义是先进先出(即 FIFO)。换句话说,代理必须按照消息添加到队列的顺序将消息分派给消费者。有两种基本方法可以解决这个问题。
JMS 消息可以具有从 0 到 9 的“优先级”。具有较高优先级的消息可能会在具有较低优先级的消息之前由代理分派给消费者。 JMS 消费者可以指定消息
选择器。只有与选择器匹配的消息才会被发送给消费者。这些消息将按照相对于彼此的 FIFO 顺序进行分派,但它们可能会跳到原本在它们之前分派的其他消息之前。选择器仅作用于消息的标头或属性,因此使用者必须了解其想要使用的消息的一些信息。选择器语法基于 SQL92 条件表达式语法的子集。您可以在 API 文档中找到有关选择器及其工作原理的更多信息。