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

时间:2019-05-31 07:54:26

标签: c# .net activemq-artemis nms

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

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

我尝试了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);
}

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

1 个答案:

答案 0 :(得分:0)

如果使用AcitveMQ OpenWire NMS客户端,则不会将您所做的奇怪的多播操作应用于URI,这会给您带来错误。如果您使用会话API,则客户端应该可以正常工作,而不要使造成很多人陷入麻烦的SessionUtil API令人困惑。

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