【问题标题】:ActiveMQ 5.7.0 Selector not working in C#ActiveMQ 5.7.0 选择器在 C# 中不起作用
【发布时间】:2013-01-24 13:51:02
【问题描述】:

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

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 代理是使用开箱即用的设置安装的。我需要使用任何特殊设置来使选择器工作吗?

【问题讨论】:

  • 最好的办法是创建一个 NUnit 测试用例并将其附加到 NMS Jira 跟踪器的新问题上。

标签: c# activemq nms


【解决方案1】:

您肯定希望使用 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 必须完全匹配。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 2013-08-21
相关资源
最近更新 更多