我正在使用 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。
谢谢
答案 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客户端以方便使用。