我准备使用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);
}
通常我会收到消息,因为我只是从任播切换到多播,但实际上我什么也没收到。
答案 0 :(得分:0)
如果使用AcitveMQ OpenWire NMS客户端,则不会将您所做的奇怪的多播操作应用于URI,这会给您带来错误。如果您使用会话API,则客户端应该可以正常工作,而不要使造成很多人陷入麻烦的SessionUtil API令人困惑。
我将使用Session.CreateTopic获取一个ITopic实例,然后使用应该映射到Artemis多播地址的实例创建消费者,而无需执行任何操作。当然,在发送任何消息之前,您确实需要进行订阅,因为如果在发送消息时周围没有使用者,则主题不会保留消息。