【发布时间】:2017-06-30 21:41:48
【问题描述】:
我有一个私有流,许多公共流使用flow-ref 共享它。我正在寻找使用 MEL,使用 Mule 3.3.0 在私人流中获取调用者流名称。这可能吗?
【问题讨论】:
标签: mule
我有一个私有流,许多公共流使用flow-ref 共享它。我正在寻找使用 MEL,使用 Mule 3.3.0 在私人流中获取调用者流名称。这可能吗?
【问题讨论】:
标签: mule
Mule 通过flow-ref 调用私有流时不会向事件添加任何属性,因此您的选择是:
<set-variable>设置一个带有流名称的变量,并使用#[flowVars.yourVariableName]读取这个变量。#[message.inboundProperties.MULE_ENDPOINT] 获取入站端点 URL,也可以使用 #[message.inboundProperties.MULE_ORIGINATING_ENDPOINT] 获取其名称。MuleEvent 消息中的调用变量。在您的所有父流中将其与 custom-processor 元素一起使用,在 flow-ref 之前。【讨论】:
<set-variable variableName="callerFlowName" value="#[flow.name]"/>。例外情况是:1. unable to resolve token: unable to resolve variable 'flow' (org.mvel2.UnresolveablePropertyException) org.mvel2.integration.impl.BaseVariableResolverFactory:60 (null) 2. Execution of the expression "flow.name" failed. (org.mule.api.expression.ExpressionRuntimeException)。但这很好用:<logger message="Flow name is #[flow.name]" level="INFO" />
#[flow.name] 无效:flow 变量不是 MEL 中的隐式顶级变量 - 请参阅:mulesoft.org/documentation/display/current/MEL+Cheat+Sheet 同样,Mule 不会将任何变量与流名称绑定,您必须自己设置:<set-variable variableName="callerFlowName" value="myFlowName"/>。顺便说一句,我添加了第三个选项 :)
flow 的未记录的 MEL 变量,但不清楚它何时被绑定,何时不被绑定。显然在logger 中,但不是在set-variable 中。也许您可以尝试使用表达式组件:它可能会被绑定,因此您可以这样做:expression-component 中的flowVars.callerFlowName = flow.name。