我正在尝试使用以下代码从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();
答案 0 :(得分:1)
有关此主题,请参见ActiveMQ documentation:
如How do I create new destinations中所述,无需预先创建所有目的地,您可以让经纪人即时创建它们。
但是,如果您不希望这种行为,或者希望将此行为限制为某些主题或队列Wildcards(队列或主题名称空间的区域),则可以使用Security插件不允许在队列和主题名称空间的任何区域使用 admin 角色
答案 1 :(得分: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;
}
}