我有一个Mule子流,可能有两个出站JMS队列。当我使用MEL根据标题值进行选择时,我的消息最终在一个队列中,就像MEL甚至没有被执行一样:
<sub-flow name="enqueueFlow">
<!--logger message="Message inbound #[message.inboundProperties['myheader']]" doc:name="Test Flow logging" level="INFO"/-->
<choice doc:name="QueueChoice">
<when expression="#[message.inboundProperties['myheader'] != null and message.inboundProperties['myheader'] == 'urgent']">
<set-variable variableName="queueName" value="${urgentQueueName}" doc:name="queueName"/>
</when>
<otherwise>
<set-variable variableName="queueName" value="${lowPriorityQueueName}" doc:name="queueName"/>
</otherwise>
</choice>
<!--logger message="Deposit message into queue named #[variable:queueName]" doc:name="Test Flow logging" level="INFO"/-->
<jms:outbound-endpoint queue="#[variable:queueName]"
connector-ref="EnqueueJmsConnector">
</jms:outbound-endpoint>
</sub-flow>
答案 0 :(得分:1)
在jms:outbound-endpoint
中,使用#[queueName]
代替#[variable:queueName]
也不需要使用选择路由器来模拟三元表达式,只需使用:
<set-variable variableName="queueName"
value="#[h = message.inboundProperties['myheader']; h == empty || h != 'urgent' ? '${lowPriorityQueueName}' : '${urgentQueueName}']"/>