我使用的是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。
谢谢
当您发送消息时,您不应用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客户端以方便使用。