Выход из двоеточия в 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)