我有一个关于 JMS 队列的问题。
我已经使用共享队列实现了 jms 发送器/接收器,因为它是我可用的唯一队列,也是我唯一可以使用的队列。
我现在面临的问题是,由于先到先得,我无法保证我从生产者发送的消息将被我的消费者消耗,而不是其他共享此队列的消息,反之亦然。所以我正在消耗其他应用程序的消息,它们也正在消耗我的消息。
有没有一种方法可以让我只监听消息而不从队列中使用它们,或者这更像是一个主题实现?
或者也许我可以显式设置一个只有我的消费者才会选择的标识符。
我的主要代码:
public class AsyncReceiver implements MessageListener, ExceptionListener
{
public static void main(String[] args) throws Exception
{
//create queue factory
factory = new TibjmsQueueConnectionFactory(serverUrl);
//create queue connection
queueConn = factory.createQueueConnection(userName, password);
queueConn.setExceptionListener(this);
//create queue session
session = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
//receive message by QueueReceiver
final Queue queue = session.createQueue(queueName);
final QueueReceiver queueReceiver = session.createReceiver(queue);
queueReceiver.setMessageListener(this);
queueConn.start ();
}
最佳答案
您应该使用 JMS 选择器。每条 JMS 消息都可以包含您在发送方启动的属性。
消息使用者可以注册到 JMS 目标(队列或主题),指定选择器 - 类似 SQL 的语句,解释它想要使用哪些消息。因此,您可以指定应用程序特定的属性,然后仅接收相关消息。
关于java - 具有 2 个监听器的 JMS 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195246/