【问题标题】:Cannot filter message using selector for STOMP in ActiveMQ无法使用 ActiveMQ 中的 STOMP 选择器过滤消息
【发布时间】:2019-08-04 19:48:04
【问题描述】:

我正在使用 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。

谢谢

【问题讨论】:

    标签: node.js jms activemq stomp


    【解决方案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 客户端。

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 2019-09-29
      • 1970-01-01
      • 2021-11-22
      • 2021-03-17
      • 2021-06-17
      • 2014-03-28
      • 2021-04-23
      • 2011-12-24
      相关资源
      最近更新 更多