Activemq 在Mule 3的JMS选择器中使用表达式

Activemq 在Mule 3的JMS选择器中使用表达式,activemq,mule,Activemq,Mule,我想获得一个队列: <jms:inbound-endpoint connector-ref="jmsConnector" queue="queue.dev" > <jms:selector expression="JMSCorrelationID='353'"/> </jms:inbound-endpoint> 它可以工作,但我想在选择器中使用一个表达式: <jms:inbound-endpoint connector-ref="jmsConnec

我想获得一个队列:

<jms:inbound-endpoint connector-ref="jmsConnector" queue="queue.dev" >
<jms:selector expression="JMSCorrelationID='353'"/>
</jms:inbound-endpoint>

它可以工作,但我想在选择器中使用一个表达式:

<jms:inbound-endpoint connector-ref="jmsConnector" queue="queue.dev" >
<jms:selector expression="JMSCorrelationID='#[header:OUTBOUND:codeReport]'"/>
</jms:inbound-endpoint>


它不起作用。

这没有意义:您试图在入站端点中使用出站属性。这是行不通的

codeReport
的值应该来自哪里?如果是属性文件,则使用
${codeReport}

编辑:事实证明,根据OP的注释,解决方案是在JMS队列上使用请求者,而不是入站端点。下面的代码演示如何请求消息,直到队列为空,然后在
java.util.List
中返回消息:

<scripting:component>
    <scripting:script engine="groovy"><![CDATA[
        def jmsMessages = []

        for (def muleMessage = muleContext.client.request("jms://out.queue.dev?selector=JMSCorrelationID%3D'"+ message.getInboundProperty('codeReport') +"'", -1L);
             muleMessage != null;) {
          [] << muleMessage.payload
        }

        jmsMessages
    ]]></scripting:script>
</scripting:component>

这没有意义:您试图在入站端点中使用出站属性。这是行不通的

codeReport
的值应该来自哪里?如果是属性文件,则使用
${codeReport}

编辑:事实证明,根据OP的注释,解决方案是在JMS队列上使用请求者,而不是入站端点。下面的代码演示如何请求消息,直到队列为空,然后在
java.util.List
中返回消息:

<scripting:component>
    <scripting:script engine="groovy"><![CDATA[
        def jmsMessages = []

        for (def muleMessage = muleContext.client.request("jms://out.queue.dev?selector=JMSCorrelationID%3D'"+ message.getInboundProperty('codeReport') +"'", -1L);
             muleMessage != null;) {
          [] << muleMessage.payload
        }

        jmsMessages
    ]]></scripting:script>
</scripting:component>


变量
codeReport
是rest的一个参数(是一个动态变量)。这不可能是一个财产。
jms:selector
是入站端点的属性<代码>http://www.mulesoft.org/documentation/display/current/JMS+传输+引用#jmstransortreference示例配置。流有一个
http:inbound端点
,并使用
客户端从我的测试运行它。发送(“http://localhost:8177/customerUpdate?codeReport=351",","道具",
Mmmh好的,但我更希望您编辑您的问题并显示HTTP和JMS端点的完整流程。不清楚的是,您希望如何处理来自JMS入站端点的消息?我希望放入我的组件并执行业务逻辑。总之,HTTP请求将提供
codeReport
,还将启动JMS侦听器。之后,JMS队列上接收的所有消息以及与选择器匹配的消息都将由组件处理。如果第二个HTTP请求进入,会发生什么情况?是否要启动另一个侦听器?即使
codeReport
相同,变量
codeReport
也是rest的参数(是动态变量)。这不可能是一个财产。
jms:selector
是入站端点的属性<代码>http://www.mulesoft.org/documentation/display/current/JMS+传输+引用#jmstransortreference示例配置。流有一个
http:inbound端点
,并使用
客户端从我的测试运行它。发送(“http://localhost:8177/customerUpdate?codeReport=351",","道具",
Mmmh好的,但我更希望您编辑您的问题并显示HTTP和JMS端点的完整流程。不清楚的是,您希望如何处理来自JMS入站端点的消息?我希望放入我的组件并执行业务逻辑。总之,HTTP请求将提供
codeReport
,还将启动JMS侦听器。之后,JMS队列上接收的所有消息以及与选择器匹配的消息都将由组件处理。如果第二个HTTP请求进入,会发生什么情况?是否要启动另一个侦听器?即使
codeReport
是相同的?