无法在 ActiveMQ 中使用 STOMP 选择器过滤消息
Cannot filter message using selector for STOMP in ActiveMQ
我正在使用 ActiveMQ 5.15.8。我在 node.js 中使用 STOMP 协议与库 stompit.
生产者代码片段:
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
header。您只需应用 key/value,例如:
var headers = {
'destination':'/topic/xyz',
'persistent':'true',
'content-type':'binary/octet-stream',
'content-length':9999,
'key': "A"
}
var frame = client.send(headers)
然后您的消费者选择器将在 header 上运行。保持消费者的 selector
定义不变。更新生产者后它应该可以工作。
就其价值而言,选择器使用 here 中描述的 SQL92 条件表达式语法的一个子集(向下滚动到 "Message Selectors" 部分)。为此引用 JMS 文档可能看起来很奇怪,但 STOMP 规范没有定义与选择器相关的任何内容。但是,为了方便起见,已经为其 JMS 客户端(如 ActiveMQ)实现它的代理将其公开给 STOMP 客户端。
我正在使用 ActiveMQ 5.15.8。我在 node.js 中使用 STOMP 协议与库 stompit.
生产者代码片段:
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
header。您只需应用 key/value,例如:
var headers = {
'destination':'/topic/xyz',
'persistent':'true',
'content-type':'binary/octet-stream',
'content-length':9999,
'key': "A"
}
var frame = client.send(headers)
然后您的消费者选择器将在 header 上运行。保持消费者的 selector
定义不变。更新生产者后它应该可以工作。
就其价值而言,选择器使用 here 中描述的 SQL92 条件表达式语法的一个子集(向下滚动到 "Message Selectors" 部分)。为此引用 JMS 文档可能看起来很奇怪,但 STOMP 规范没有定义与选择器相关的任何内容。但是,为了方便起见,已经为其 JMS 客户端(如 ActiveMQ)实现它的代理将其公开给 STOMP 客户端。