JMS选择器中的转义冒号-ApacheActiveMQ Apollo

JMS选择器中的转义冒号-ApacheActiveMQ Apollo,jms,activemq,ansi-sql-92,Jms,Activemq,Ansi Sql 92,我使用ApacheAppollo-1.1作为我的JMS代理 其中,我尝试在JMS头上使用选择器,该头的值中包含冒号。JMS标头如下所示: SYMBOL=USDGBP17MAYFUT::CDE 当我尝试使用消息选择器时 symbolSelector = "(SYMBOL='USDGBP17MAYFUT::CDE')" 或 未选择正确的消息 如果我从JMS头中的符号中删除冒号,并相应地在symbolSelector中删除冒号,则过滤工作正常 请帮助我使用正确的选择器,因为我需要带有冒号的符号 更

我使用ApacheAppollo-1.1作为我的JMS代理

其中,我尝试在JMS头上使用选择器,该头的值中包含冒号。JMS标头如下所示:

SYMBOL=USDGBP17MAYFUT::CDE
当我尝试使用消息选择器时

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

未选择正确的消息

如果我从JMS头中的符号中删除冒号,并相应地在symbolSelector中删除冒号,则过滤工作正常

请帮助我使用正确的选择器,因为我需要带有冒号的符号

更新:

我尝试了以下转义字符(基于Peter的输入),但没有成功:

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)
org.fusesource.stomp.client.ProtocolException:收到错误:选择器表达式无效:(消息\u TYPE='REGISTER\u REQUEST')和(符号类似于'USDINR17JUNFUT\$:\$:CDE\u FO'ESCAPE'\$)
javax.jms.JMSException:收到错误:选择器表达式无效:(消息\u TYPE='REGISTER\u REQUEST')和(类似于'USDINR17JUNFUT\$:\$:CDE\u FO'ESCAPE'\$的符号)
在org.fusesource.stomp.jms.stompjmsceptionsupport.create(stompjmsceptionsupport.java:59)~[stompjms-client-1.18.jar:1.18]
在org.fusesource.stomp.jms.StompChannel.subscribe(StompChannel.java:257)~[stompjms-client-1.18.jar:1.18]
在org.fusesource.stomp.jms.StompJmsSession.add(StompJmsSession.java:608)~[stompjms-client-1.18.jar:1.18]
在org.fusesource.stomp.jms.stompjmsessageconsumer.init(stompjmsessageconsumer.java:67)~[stompjms-client-1.18.jar:1.18]
在org.fusesource.stomp.jms.StompJmsSession.createConsumer(StompJmsSession.java:223)~[stompjms-client-1.18.jar:1.18]
在com.edelweiss.libs.AnalyticsJMSPubSub.consumer.GenericJMSConsumer.(GenericJMSConsumer.java:53)[AnalyticsJMSPubSub-0.0.1-SNAPSHOT.jar:?]
在com.edelweiss.algo.tmp.JMSPubSub.App.main(App.java:43)[classes/:?]
由以下原因引起:org.fusesource.stomp.client.ProtocolException:收到错误:选择器表达式无效:(消息\u TYPE='REGISTER\u REQUEST')和(符号类似于'USDINR17JUNFUT\$:\$:CDE\u FO'ESCAPE'\$)
在org.fusesource.stomp.client.CallbackConnection.processStompFrame(CallbackConnection.java:110)~[stompjms-client-1.18.jar:1.18]
在org.fusesource.stomp.client.CallbackConnection.access$000(CallbackConnection.java:33)~[stompjms-client-1.18.jar:1.18]
在org.fusesource.stomp.client.CallbackConnection$1.onTransportCommand(CallbackConnection.java:61)~[stompjms-client-1.18.jar:1.18]
在org.fusesource.hawtdispatch.transport.tcpttransport.drainInbound(tcpttransport.java:664)~[hawtdispatch-transport-1.18.jar:1.18]
在org.fusesource.hawtdispatch.transport.tcpttransport$6.run(tcpttransport.java:543)~[hawtdispatch-transport-1.18.jar:1.18]
在org.fusesource.hawtdispatch.internal.NioDispatchSource$3.run(NioDispatchSource.java:209)~[hawtdispatch1.18.jar:1.18]
在org.fusesource.hawtdispatch.internal.SerialDispatchQueue.run(SerialDispatchQueue.java:100)~[hawtdispatch-1.18.jar:1.18]
在org.fusesource.hawtdispatch.internal.pool.SimpleThread.run(SimpleThread.java:77)~[hawtdispatch-1.18.jar:1.18]
位于org.fusesource.stomp.client.CallbackConnection.processStompFrame(CallbackConnection.java:110)
在org.fusesource.stomp.client.CallbackConnection.access$000(CallbackConnection.java:33)
在org.fusesource.stomp.client.CallbackConnection$1.onTransportCommand(CallbackConnection.java:61)
位于org.fusesource.hawtdispatch.transport.tcpttransport.drainInbound(tcpttransport.java:664)
位于org.fusesource.hawtdispatch.transport.tcpttransport$6.run(tcpttransport.java:543)
位于org.fusesource.hawtdispatch.internal.NioDispatchSource$3.run(NioDispatchSource.java:209)
在org.fusesource.hawtdispatch.internal.SerialDispatchQueue.run(SerialDispatchQueue.java:100)上
位于org.fusesource.hawtdispatch.internal.pool.SimpleThread.run(SimpleThread.java:77)

第一件事——ApacheAppollo 1.1是一款现已停产的产品的早期版本。当面临问题时,我会考虑升级它

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

使用带有选择器的消息的测试命令。逃脱!用于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)

首先,ApacheAppollo1.1是一款现已停产的产品的早期版本。当面临问题时,我会考虑升级它

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

使用带有选择器的消息的测试命令。逃脱!用于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)

非常感谢…您能告诉我Java中的情况吗?使用什么转义字符?那是OpenWire而不是Stomp。您的stacktrace是stomp,但问题是labeld JMS。实际上,我正在使用apache提供的JMS Api通过stomp进行通信。非常感谢……您能告诉我Java中的情况吗?使用什么转义字符?那是OpenWire而不是Stomp。您的stacktrace是stomp,但问题是LabeldJMS。实际上,我正在使用apache提供的JMS Api通过stomp进行通信。
➜  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)