0

我准备使用 C# 应用程序通过 ActiveMQ Artemis 发送和接收消息。在任播模式下,一切正常。

当我尝试在多播模式下发送和接收时,我可以发送,但我没有收到来自队列的任何消息。

我尝试了 java 的技巧,在 tcp uri 之前设置了“多播”标志,但显示一条错误消息,表明没有“多播”的实现

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

通常我会收到消息,因为我只从任播切换到多播,但实际上我什么也没收到。

4

1 回答 1

0

如果使用 AcitveMQ OpenWire NMS 客户端,您不会将您所做的奇怪的多播操作应用于 URI,这会给您一个错误。如果您使用 Session API,而不是导致许多人遇到问题的令人困惑的 SessionUtil API,客户端应该可以正常工作。

我会使用 Session.CreateTopic 来获取 ITopic 实例,然后使用应该映射到 Artemis 多播地址的消费者创建消费者,而无需执行任何操作。您当然需要在发送任何消息之前进行订阅,因为如果发送消息时没有消费者在附近,主题不会保留消息。

于 2019-06-01T18:19:47.623 回答