如何在 C# 中接收来自 Artemis 多播队列的消息?

How do I receive messages from an Artemis multicast queue in C#?

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

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

我尝试了 java 中的技巧,在 tcp uri 之前设置了 "multicast" 标志,但显示一条错误消息,指出没有 "multicast"[= 的实现11=]

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

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

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

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