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#中工作的主要内容,如果未能解决你的问题,请参考以下文章
为啥“#.id”在 CSS/jQuery 中是一个糟糕的选择器,但它在 HTML 锚中工作?
谷歌标签管理器无法在 Ionic+Angular 应用程序中工作