Выход из двоеточия в JMS Selector - Apache ActiveMQ Apollo

Я использую Apache Apollo -1.1 в качестве моего JMS-брокера.

В рамках этого я пытаюсь использовать селектор в заголовке JMS, который содержит двоеточие в значении. Заголовок JMS выглядит следующим образом:

SYMBOL=USDGBP17MAYFUT::CDE

Когда я пытаюсь использовать селектор сообщений

symbolSelector = "(SYMBOL='USDGBP17MAYFUT::CDE')"

ИЛИ ЖЕ

symbolSelector = "(SYMBOL LIKE 'USDGBP17MAYFUT!:!:CDE' ESCAPE '!')"

Правильное сообщение не выбирается.

Если я удаляю двоеточие из символа в заголовке JMS и, соответственно, в SymbolSelector, фильтрация работает нормально.

Пожалуйста, помогите мне использовать правильный селектор, так как мне нужно иметь символ с двоеточием.

Обновить:

Я пробовал следующее как escape-символы (на основе данных Питера), но не сработало:

symbolSelector= "(SYMBOL LIKE 'USDINR17JUNFUT\\$:\\$:CDE_FO' ESCAPE '\\$')"

А ТАКЖЕ

symbolSelector= "(SYMBOL LIKE 'USDINR17JUNFUT\\!:\\!:CDE_FO' ESCAPE '\\!')"

Но я продолжаю получать исключение:

org.fusesource.stomp.client.ProtocolException: Received an error: Invalid selector expression:  (MESSAGE_TYPE='REGISTER_REQUEST') AND (SYMBOL LIKE 'USDINR17JUNFUT\$:\$:CDE_FO' ESCAPE '\$')
javax.jms.JMSException: Received an error: Invalid selector expression:  (MESSAGE_TYPE='REGISTER_REQUEST') AND (SYMBOL LIKE 'USDINR17JUNFUT\$:\$:CDE_FO' ESCAPE '\$') 
    at org.fusesource.stomp.jms.StompJmsExceptionSupport.create(StompJmsExceptionSupport.java:59) ~[stompjms-client-1.18.jar:1.18]
    at org.fusesource.stomp.jms.StompChannel.subscribe(StompChannel.java:257) ~[stompjms-client-1.18.jar:1.18]
    at org.fusesource.stomp.jms.StompJmsSession.add(StompJmsSession.java:608) ~[stompjms-client-1.18.jar:1.18]
    at org.fusesource.stomp.jms.StompJmsMessageConsumer.init(StompJmsMessageConsumer.java:67) ~[stompjms-client-1.18.jar:1.18]
    at org.fusesource.stomp.jms.StompJmsSession.createConsumer(StompJmsSession.java:223) ~[stompjms-client-1.18.jar:1.18]
    at com.edelweiss.libs.AnalyticsJMSPubSub.consumer.GenericJMSConsumer.<init>(GenericJMSConsumer.java:53) [AnalyticsJMSPubSub-0.0.1-SNAPSHOT.jar:?]
    at com.edelweiss.algo.tmp.JMSPubSub.App.main(App.java:43) [classes/:?]
Caused by: org.fusesource.stomp.client.ProtocolException: Received an error: Invalid selector expression:  (MESSAGE_TYPE='REGISTER_REQUEST') AND (SYMBOL LIKE 'USDINR17JUNFUT\$:\$:CDE_FO' ESCAPE '\$')
at org.fusesource.stomp.client.CallbackConnection.processStompFrame(CallbackConnection.java:110) ~[stompjms-client-1.18.jar:1.18]
    at org.fusesource.stomp.client.CallbackConnection.access$000(CallbackConnection.java:33) ~[stompjms-client-1.18.jar:1.18]
    at org.fusesource.stomp.client.CallbackConnection$1.onTransportCommand(CallbackConnection.java:61) ~[stompjms-client-1.18.jar:1.18]
    at org.fusesource.hawtdispatch.transport.TcpTransport.drainInbound(TcpTransport.java:664) ~[hawtdispatch-transport-1.18.jar:1.18]
    at org.fusesource.hawtdispatch.transport.TcpTransport$6.run(TcpTransport.java:543) ~[hawtdispatch-transport-1.18.jar:1.18]
    at org.fusesource.hawtdispatch.internal.NioDispatchSource$3.run(NioDispatchSource.java:209) ~[hawtdispatch-1.18.jar:1.18]
    at org.fusesource.hawtdispatch.internal.SerialDispatchQueue.run(SerialDispatchQueue.java:100) ~[hawtdispatch-1.18.jar:1.18]
    at org.fusesource.hawtdispatch.internal.pool.SimpleThread.run(SimpleThread.java:77) ~[hawtdispatch-1.18.jar:1.18]

    at org.fusesource.stomp.client.CallbackConnection.processStompFrame(CallbackConnection.java:110)
    at org.fusesource.stomp.client.CallbackConnection.access$000(CallbackConnection.java:33)
    at org.fusesource.stomp.client.CallbackConnection$1.onTransportCommand(CallbackConnection.java:61)
    at org.fusesource.hawtdispatch.transport.TcpTransport.drainInbound(TcpTransport.java:664)
    at org.fusesource.hawtdispatch.transport.TcpTransport$6.run(TcpTransport.java:543)
    at org.fusesource.hawtdispatch.internal.NioDispatchSource$3.run(NioDispatchSource.java:209)
    at org.fusesource.hawtdispatch.internal.SerialDispatchQueue.run(SerialDispatchQueue.java:100)
    at org.fusesource.hawtdispatch.internal.pool.SimpleThread.run(SimpleThread.java:77)

1 ответ

Перво-наперво - Apache Apollo 1.1 - очень ранняя версия уже снятого с производства продукта. Я бы посмотрел на обновление, когда сталкиваюсь с проблемами.

Anyway, selectors with colons works just like any other selector. Оба приведенных выше утверждения работают без проблем при использовании JMS-клиента ActiveMQ 5.8 / OpenWire v8 с брокером Apollo 1.1. Это должно быть что-то еще.

Тестовая команда для получения сообщения с селектором. Побег из! это для Zsh, а не Java/JMS.

➜  target git:(master) ✗ java -jar a.jar -b tcp://localhost:61613 -U admin -P password --get --selector "(SYMBOL LIKE 'USDGBP17MAYFUT\!:\!:CDE' ESCAPE '\!')" TEST.QUEUE
-----------------
Message Properties
  SYMBOL: USDGBP17MAYFUT::CDE
Payload:
  msg
Operation completed in 23ms (excluding connect)
Другие вопросы по тегам