我使用 Apache Apollo -1.1 作为我的 JMS 代理。
其中,我尝试在 JMS 标头上使用选择器,该选择器的值中包含冒号。JMS 标头如下:
SYMBOL=USDGBP17MAYFUT::CDE
当我尝试使用消息选择器时
symbolSelector = "(SYMBOL='USDGBP17MAYFUT::CDE')"
或者
symbolSelector = "(SYMBOL LIKE 'USDGBP17MAYFUT!:!:CDE' ESCAPE '!')"
未选择正确的消息。
如果我从 JMS 标头中的符号中删除冒号,并相应地在符号选择器中,过滤工作正常。
请帮助我使用正确的选择器,因为我需要带有冒号的符号。
更新:
我尝试了以下作为转义字符(基于彼得的输入),但没有奏效:
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)