Не удается отфильтровать сообщение с помощью селектора для STOMP в ActiveMQ - PullRequest
1 голос
/ 14 марта 2019

Я использую ActiveMQ 5.15.8 .Я подключаюсь к нему по протоколу STOMP в node.js с библиотекой 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.

Спасибо

1 Ответ

1 голос
/ 14 марта 2019

Когда вы отправляете сообщение, вы не применяете заголовок selector.Вы просто применяете ключ / значение, например:

var headers = {
'destination':'/topic/xyz',
'persistent':'true',
'content-type':'binary/octet-stream',
'content-length':9999,
'key': "A"
}
var frame = client.send(headers)

Тогда селектор вашего потребителя будет работать с этим заголовком.Оставьте определение вашего потребителя selector таким же.Он должен работать после обновления производителя.

Для чего это стоит, селекторы используют подмножество синтаксиса условных выражений SQL92, описанного здесь (прокрутите вниз до раздела «Селекторы сообщений»).Для этого может показаться странным привести документацию JMS для этого, но спецификация STOMP не определяет ничего, связанного с селекторами.Однако брокеры, которые уже внедрили его для своих клиентов JMS (например, ActiveMQ), для удобства предоставляют его клиентам STOMP.

...