Мне нужно подключиться к брокеру Artemis MQ клиента из приложения C++ (среда Linux). У меня нет административного доступа к брокеру. Ранее мне удавалось успешно использовать для этой цели клиентскую библиотеку CMS (https://activemq.apache.org/comComponents/cms/) для разных брокеров. Теперь я столкнулся со следующей проблемой даже с примером Hello World, прикрепленным к клиентскому пакету:
connectionFactory->createConnection()
работает хорошо (с правильными параметрами имени пользователя и пароля), но
connection->start()
не работает на следующей строке с сообщением ниже:
AMQ229213: User: ******** does not have permission='CREATE_NON_DURABLE_QUEUE' for queue d002d98a-4343-4f0a-ad0d-cf9a6941b36d on address ActiveMQ.Advisory.TempQueue
FILE: org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection.convertException(OpenWireConnection.java), LINE: 461
FILE: org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection.act(OpenWireConnection.java), LINE: 373
FILE: org.apache.activemq.artemis.utils.actors.ThresholdActor.doTask(ThresholdActor.java), LINE: 73
FILE: org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java), LINE: 68
FILE: org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java), LINE: 57
FILE: org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java), LINE: 32
FILE: org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java), LINE: 68
FILE: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java), LINE: 1136
FILE: java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java), LINE: 635
FILE: org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java), LINE: 118
FILE: activemq/core/ActiveMQConnectionFactory.cpp, LINE: 360
Никакой соответствующей информации в Интернете я не нашел. Администратор брокера настаивает на том, что мне нужно изменить клиент, чтобы он не пытался создавать какие-либо очереди - чего я не собираюсь делать, но кажется неизбежным.
Клиент регистрируется у брокера, чтобы получать уведомления о различных событиях создания пункта назначения, на что указывает название пункта назначения, от которого он отклоняется.
Чтобы отключить это, вам нужно отключить просмотр рекомендаций, используя опцию подключения здесь.
connectionFactory.setWatchTopicAdvisories(false);
Или, если я правильно помню, его можно установить в URI соединения через:
?connection.watchTopicAdvisories=false
Спасибо, Тим! Я потратил почти 2 дня на эту проблему, я так рад, что решил ее.