ActiveMQ 5.7.0选择器无法在C#中工作

问题描述 投票:1回答:1

我有一个非常简单的ActiveMQ消息使用者,它在C#中创建如下:

using(IMessageConsumer consumer = session.CreateConsumer(destination,"NMSCorrelationID='<value of correlation id>'")){

   /* This Receive(..) operation does not retrieve the message with the correlation id which I confirmed to be available on the queue. */
   IMessage message = consumer.Receive(new TimeSpan(1000));

}

但是,如果在创建使用者时不使用选择器,我可以收到消息。目标是ActiveMQ代理上的队列。我已经尝试使用CorrelationID和JMSCorrelationID作为选择器,但它们都没有工作。 ActiveMQ代理安装了开箱即用的设置。是否有任何特殊设置需要用于选择器才能工作?

c# activemq nms
1个回答
2
投票

您肯定希望使用JMSCorrelationID设置选择器。使用NMSCorrelationID,或只使用CorrelationID将导致它忽略所有消息。我用以下主题和队列测试了以下内容,一切正常。我在ActiveMQ 5.8.0上进行了测试,但我很确定这在5.7.0上运行得很好。

IMessageConsumer subscriber = session.CreateConsumer(
                                 "queue://TestCorrelation",
                                 "JMSCorrelationID = 'FOO'",
                                 false);

如果该消费者已将第三个参数(noLocal)设置为true,则代理不会从与生产者相同的连接将消息排入消费者。您需要有两个单独的连接才能使相关ID选择器工作。一个发送消息,一个消费者在另一个连接上接收消息。如果将noLocal设置为false,则与生产者在同一连接上的使用者将收到该消息。

如果要测试,也可以尝试在选择器中使用一些通配符。

"JMSCorrelationID LIKE '%FOO%'"

请注意选择器区分大小写。您的相关ID必须完全匹配。

© www.soinside.com 2019 - 2024. All rights reserved.