Чтение сообщений очереди AMQ без создания новой очереди - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь просмотреть сообщения из очереди 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();

Ответы [ 2 ]

1 голос
/ 28 марта 2019

См. Документацию ActiveMQ на эту тему:

Как описано в Как создать новые пункты назначения Нет необходимости создавать все пункты назначения заранее, вы можете позволить брокеру создавать их на лету.

Однако, если вы не хотите, чтобы это поведение или вы хотели ограничить это поведение определенной темой или очередью Подстановочные знаки (области очереди или пространства имен тем), тогда вы можете использовать Безопасность плагины для запрета роли admin в любых областях пространства имен и тем, которые вы хотите

0 голосов
/ 01 апреля 2019

Это живая система, и, к сожалению, у меня нет доступа к ее настройкам безопасности или другому пользователю. Но нашел работу вокруг, Я извлек коллекцию очередей по следующему коду и проверил 'destinationQueue' [предоставил имя очереди для просмотра] вместе с коллекцией перед созданием QueueBrowser

        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;
            }

        }
...