在不创建新队列的情况下读取AMQ队列消息

问题描述 投票:0回答:2

我正在尝试使用以下代码从ActiveMQ队列浏览消息。如果不存在,这将在代理上创建一个新的destinationQueue。如何避免创建新队列?如果给定的队列不存在,我期待一个JMSException

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");       
Connection connection = connectionFactory.createConnection("admin", "admin");
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(destinationQueue);
QueueBrowser queueBrowser = session.createBrowser(queue);
Enumeration enumMsgs = queueBrowser.getEnumeration();
jms activemq
2个回答
1
投票

有关此主题,请参阅ActiveMQ documentation

正如How do I create new destinations中所描述的那样,不需要预先创建所有目的地,您可以让经纪人动态创建它们。

但是,如果您不想要此行为,或者希望将此行为限制为某个主题或队列Wildcards(队列或主题名称空间的区域),那么您可以使用Security插件来禁止队列的任何区域上的admin角色和你想要的主题命名空间


0
投票

它是一个实时系统,不幸的是我无法访问其安全设置或其他用户。但是找到了解决方法,我通过以下代码获取了队列集合,并在创建'QueueBrowser'之前验证了'destinationQueue'[提供了用于浏览的队列名称]和集合

        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection("admin","admin");
        connection.start();
        DestinationSource ds = connection.getDestinationSource();
        Set<ActiveMQQueue> queues = ds.getQueues();
        for (ActiveMQQueue queue : queues) {
            if (destinationQueue.equals(queue.getPhysicalName())) {
                queueExists = true;
            }

        }
© www.soinside.com 2019 - 2024. All rights reserved.