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

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

我使用的是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。

谢谢

node.js jms activemq stomp
1个回答
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客户端以方便使用。

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