基于流量变量值的Mule路由选择

时间:2014-03-15 17:32:30

标签: jms mule flow

我有一个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>

1 个答案:

答案 0 :(得分:1)

jms:outbound-endpoint中,使用#[queueName]代替#[variable:queueName]

也不需要使用选择路由器来模拟三元表达式,只需使用:

<set-variable variableName="queueName"
    value="#[h = message.inboundProperties['myheader']; h == empty || h != 'urgent' ? '${lowPriorityQueueName}' : '${urgentQueueName}']"/>