Mule 中的 jms 选择器表达式不起作用
jms selector expression in Mule is not working
<flow name="readqueueFlow1" doc:name="readqueueFlow1" >
<jms:inbound-endpoint queue="MyTestQueue" connector-ref="Active_MQ-Priority" doc:name="JMS">
<jms:selector expression="JMSCorrelationID=’353’" />
</jms:inbound-endpoint>
</flow>
它可以工作,但是当我尝试使用下面的那个时它没有部署
<!-- When we don't provide single quote it is failing in deployment -->
<jms:selector expression="JMSCorrelationID='#[flowVars.reqId]'" />
<!-- Payload contains reqId, when we provide it in single quote, it is assuming as a constant -->
<jms:selector expression="JMSCorrelationID='#[payload]'" />
我想这是你给出的答案:- Using an expression in a JMS Selector in Mule 3
还有一件事,您不能使用 #[flowVars.reqId]
动态获取 jms:selector
值,因为流变量范围仅限于流...而是使用 session 变量 喜欢 #[sessionVars.reqId]
..
您的流程将修改如下:-
<flow name="readqueueFlow1" >
<jms:inbound-endpoint queue="StudioOUT" connector-ref="Active_MQ" doc:name="JMS"/>
<scripting:component>
<scripting:script engine="groovy"><![CDATA[
def jmsMessages = []
for (def muleMessage = muleContext.client.request("jms://MyTestQueue?selector=JMSCorrelationID%3D'"+ sessionVars['reqId'] +"'", -1L);
muleMessage != null;) {
[] << muleMessage.payload
}
jmsMessages
]]></scripting:script>
</scripting:component>
<logger level="INFO" message="#[message.payload]" doc:name="Logger"/>
</flow>
你可以在这里看到消息是使用Groovy脚本发送到队列的,我使用了会话变量而不是流变量
jms:选择器表达式="putOnQueueTime > ABC "
可以在jms inbound中使用上面的表达式。
<flow name="readqueueFlow1" doc:name="readqueueFlow1" >
<jms:inbound-endpoint queue="MyTestQueue" connector-ref="Active_MQ-Priority" doc:name="JMS">
<jms:selector expression="JMSCorrelationID=’353’" />
</jms:inbound-endpoint>
</flow>
它可以工作,但是当我尝试使用下面的那个时它没有部署
<!-- When we don't provide single quote it is failing in deployment -->
<jms:selector expression="JMSCorrelationID='#[flowVars.reqId]'" />
<!-- Payload contains reqId, when we provide it in single quote, it is assuming as a constant -->
<jms:selector expression="JMSCorrelationID='#[payload]'" />
我想这是你给出的答案:- Using an expression in a JMS Selector in Mule 3
还有一件事,您不能使用 #[flowVars.reqId]
动态获取 jms:selector
值,因为流变量范围仅限于流...而是使用 session 变量 喜欢 #[sessionVars.reqId]
..
您的流程将修改如下:-
<flow name="readqueueFlow1" >
<jms:inbound-endpoint queue="StudioOUT" connector-ref="Active_MQ" doc:name="JMS"/>
<scripting:component>
<scripting:script engine="groovy"><![CDATA[
def jmsMessages = []
for (def muleMessage = muleContext.client.request("jms://MyTestQueue?selector=JMSCorrelationID%3D'"+ sessionVars['reqId'] +"'", -1L);
muleMessage != null;) {
[] << muleMessage.payload
}
jmsMessages
]]></scripting:script>
</scripting:component>
<logger level="INFO" message="#[message.payload]" doc:name="Logger"/>
</flow>
你可以在这里看到消息是使用Groovy脚本发送到队列的,我使用了会话变量而不是流变量
jms:选择器表达式="putOnQueueTime > ABC "
可以在jms inbound中使用上面的表达式。