java - 具有 2 个监听器的 JMS 队列

标签 java jms jms-topic

我有一个关于 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/

相关文章:

grails - 如何在Grails中使JMS主题变量?

java - 尝试打印时二分查找树的指针问题

java - OpenCSV + JMS/MDB 行为 + 性能问题

java - 清除 jBoss DLQ

java - WebSphere Application Server v 7.0 是否与 MQ v 6.0.2.8 兼容?

jms - 获取关联 ID 为 1 : {MY_TOPIC? =INVALID_TOPIC_EXCEPTION} 的元数据时出现警告错误 (org.apache.kafka.clients.NetworkClient)

java - 如何使用 Spring JMS 监听 JMS 主题

java - 使用正则表达式在字符串中的特殊字符串中查找特殊字符串

java - Android - 将多个图像合并为一个 ImageView

java - 尝试使用 LibGDX 登录 GooglePlay 游戏服务时出现 "signInSilently(): failure"