无法使用ActiveMQ中的STOMP选择器过滤消息

时间:2019-03-14 01:35:52

标签: node.js jms activemq stomp

我正在使用 ActiveMQ 5.15.8 。我正在使用 stompit 库中的 node.js 中的 STOMP 协议连接到它。

生产者代码段:

var headers = {
'destination':'/topic/xyz',
'persistent':'true',
'content-type':'binary/octet-stream',
'content-length':9999,
'selector': "key = 'A'"
}
var frame = client.send(headers)

消费者代码订阅代码段:

client.subscribe({'ack':'client-individual',
'activemq.retroactive':'true',
'activemq.subscriptionName':'name',
'destination':'/topic/xyz',
'selector':"key = 'A'"},(err,msg)=>{})

问题是我无法正确选择选择器。我无法使用以上代码接收任何消息。我也尝试使用:

'selector':'key=A'

这样,我收到了所有消息,但未过滤到密钥上。

有人可以帮助我正确设置此选择器。我再次使用Node.js库的Stompit。

谢谢

1 个答案:

答案 0 :(得分:1)

发送消息时,您不会应用selector标头。您只需应用键/值,例如:

var headers = {
'destination':'/topic/xyz',
'persistent':'true',
'content-type':'binary/octet-stream',
'content-length':9999,
'key': "A"
}
var frame = client.send(headers)

然后,消费者的选择器将对该标头进行操作。保持消费者的selector定义不变。更新生产者后,它应该可以工作。

就其价值而言,选择器使用here中所述的SQL92条件表达式语法的子集(向下滚动至“消息选择器”部分)。为此引用JMS文档似乎很奇怪,但是STOMP规范并未定义与选择器相关的任何内容。但是,已经为其JMS客户端(例如ActiveMQ)实现了该功能的代理将其提供给STOMP客户端以方便使用。