nodejs rhea npm для amqp не удалось создать очередь подписки по адресу в activemq artemis - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть адрес "pubsub.foo", уже настроенный как многоадресная в broker.xml.

<address name="pubsub.foo">
   <multicast/>
</address>

Согласно документации Artemis :

Когда клиенты подключаются к адресу с элементом многоадресной рассылки, для клиента автоматически создается очередь подписки.

Я создаю простую утилиту, используя rhea AMQP Node.js npm публиковать sh сообщений по адресу.

var connection = require('rhea').connect({ port: args.port, host: args.host, username:'admin', password:'xxxx' });

var sender = connection.open_sender('pubsub.foo');
sender.on('sendable', function(context) {
    var m = 'Hii test' 
    console.log('sent ' + m);
    sender.send({body:m});
    connection.close();
});

Я включил журнал отладки, и во время выполнения кода клиента я вижу такое сообщение.

2020-02-03 22:43:25,071 DEBUG [org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl] Message org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage@68933e4b is not going anywhere as it didn't have a binding on address:pubsub.foo

Я также пробовал разные варианты топи c, например, client1.pubsub.foo, pubsub.foo::client1, однако не повезло с клиентским кодом. Пожалуйста, поделитесь своими мыслями. Я новичок в ActiveMQ Artemis.

enter image description here

1 Ответ

1 голос
/ 04 февраля 2020

На самом деле вы наблюдаете ожидаемое поведение.

К сожалению, приведенная вами документация не так ясна, как могла бы быть. Когда в нем говорится, что очередь подписки будет создана в ответ на подключение клиента, это действительно означает, что подписчик не является производителем. Вот почему он создает очередь подписка . Семантика многоадресного адреса (и публикации / подписки в целом) диктует, что сообщение, отправленное при отсутствии подписчиков, будет отброшено. Поэтому вам нужно создать подписчика и , а затем отправить сообщение.

Если вы хотите использовать другую семантику, я рекомендую вам использовать anycast.

...