1

我创建了一个这样的目的地:

 Destination destination = session.createQueue("queue_name");

在这种情况下,如果名为“queue_name”的队列不存在,它将被创建。

我想形成一个队列的目的地,如果它不存在,我不想创建它

有没有办法仅在队列存在时才连接到队列?

4

3 回答 3

1

您必须使用 ActiveMQ 中的安全功能来限制允许创建目标的用户。然后,您可以在 ActiveMQ 配置中配置一组始终创建的目标。请参阅有关该主题的此页面以及有关配置安全性 的此页面。

于 2012-11-27T11:28:29.830 回答
1

我认为您应该能够使用 DestinationSource 从您的连接中获取可用队列的列表。您可以查看队列是否存在。

Havnt 尝试过,但认为它看起来像这样:

        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection();
        DestinationSource ds = connection.getDestinationSource();
        Set<ActiveMQQueue> queues = ds.getQueues();
于 2012-11-27T11:31:50.280 回答
0

您可以通过客户端(消费者/生产者)的安全配置来做到这一点。

或者,您可以通过获取可用队列列表并仅在它在列表中时进行连接,以编程方式进行操作。ActiveMQ 为此提供了一个类,但它不是 JMS 的一部分(因此您将受限于 ActiveMQ 特定的实现)。

http://activemq.apache.org/maven/5.5.0/activemq-core/apidocs/org/apache/activemq/advisory/DestinationSource.html

于 2012-11-27T11:31:51.203 回答