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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActiveMQ 5.7.0选择器无法在C#中工作相关的知识,希望对你有一定的参考价值。

我有一个非常简单的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代理安装了开箱即用的设置。是否有任何特殊设置需要用于选择器才能工作?

答案

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

以上是关于ActiveMQ 5.7.0选择器无法在C#中工作的主要内容,如果未能解决你的问题,请参考以下文章

Boost 库无法在 C++ 中工作,包含目录不起作用

属性选择器如何在JavaFX中工作?

为啥“#.id”在 CSS/jQuery 中是一个糟糕的选择器,但它在 HTML 锚中工作?

谷歌标签管理器无法在 Ionic+Angular 应用程序中工作

如何让 C 语言中的 ANTLR3.5 生成的解析器在 MVS EBCDIC 环境中工作?

使用 Sahi 驱动程序使 CSS 选择器(第一个孩子)在 Behat 3 中工作