1

我使用 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)
4

1 回答 1

0

首先要做的事——Apache Apollo 1.1 是一个现已停产的产品的早期版本。遇到问题时,我会考虑升级它。

无论如何,带有冒号的选择器就像任何其他选择器一样工作。使用带有 Apollo 1.1 代理的 ActiveMQ 5.8/OpenWire v8 JMS 客户端,上述两个语句都可以正常工作。它一定是别的东西。

使用选择器使用 msg 的测试命令。逃离!适用于 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)
于 2017-05-31T16:51:59.800 回答