#node.js #jms #activemq #stomp
#node.js #jms #activemq #stomp
Вопрос:
Я использую 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 библиотека stompit.
Спасибо
Ответ №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
Определение вашего потребителя не изменится. Это должно сработать, как только вы обновите производителя.
Как бы то ни было, селекторы используют подмножество синтаксиса условных выражений SQL92, описанного здесь (прокрутите вниз до раздела «Селекторы сообщений»). Может показаться странным ссылаться на документацию JMS для этого, но спецификация STOMP не определяет ничего, связанного с селекторами. Однако брокеры, которые уже реализуют его для своих клиентов JMS (например, ActiveMQ), предоставляют его клиентам STOMP для удобства.