Как получить сообщения из многоадресной очереди Artemis в C #? - PullRequest
0 голосов
/ 31 мая 2019

Я готов отправлять и получать сообщения через ActiveMQ Artemis с приложениями на C #.В Anycast-режиме все работает.

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

Я попробовал трюк из Java, установил флаг "multicast" перед tcp uri, но появляется сообщение об ошибке, что не существует реализации для "multicast"

private void Receiver()
{
    IConnectionFactory factory = new NMSConnectionFactory("multicast:tcp://172.29.213.150:61616");
    IConnection connection = factory.CreateConnection("artemis", "simetraehcapa");
    connection.Start();
    ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
    IDestination destination = SessionUtil.GetDestination(session, "hund");
    IMessageConsumer receiver = session.CreateConsumer(destination);
    receiver.Listener += new MessageListener(Message_Listener);
}

Обычно я получаюсообщений, потому что я только переключился с anycast на multicast, но на самом деле я ничего не получаю.

1 Ответ

0 голосов
/ 01 июня 2019

При использовании клиента AcitveMQ OpenWire NMS вы не применяете ту странную вещь, которую вы сделали, к URI, что приведет к ошибке. Клиент должен просто работать, если вы используете Session API, а не тот запутанный SessionUtil API, который привел к возникновению проблем у многих людей.

Я бы использовал Session.CreateTopic, чтобы получить экземпляр ITopic, а затем создать потребителя, использующего тот, который должен отображаться на адреса Artemis Multicast без необходимости что-либо делать. Вы, конечно, должны быть подписаны, прежде чем какие-либо сообщения будут отправлены, поскольку темы не сохраняют сообщения, если при отправке не было ни одного пользователя.

...