【问题标题】:How to get caller flow name in private flow in Mule如何在Mule的私人流中获取呼叫者流名称
【发布时间】:2017-06-30 21:41:48
【问题描述】:

我有一个私有流,许多公共流使用flow-ref 共享它。我正在寻找使用 MEL,使用 Mule 3.3.0 在私人流中获取调用者流名称。这可能吗?

【问题讨论】:

    标签: mule


    【解决方案1】:

    Mule 通过flow-ref 调用私有流时不会向事件添加任何属性,因此您的选择是:

    • 在调用私有流之前使用<set-variable>设置一个带有流名称的变量,并使用#[flowVars.yourVariableName]读取这个变量。
    • 使用调用流的入站端点来判断谁在调用。您可以使用 #[message.inboundProperties.MULE_ENDPOINT] 获取入站端点 URL,也可以使用 #[message.inboundProperties.MULE_ORIGINATING_ENDPOINT] 获取其名称。
    • 创建一个实现FlowConstructAware 的自定义MessageProcessor:这样您将获得流名称并能够自动将其设置为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 不是顶级变量,但是当这个语句起作用时:,它让我尝试不合理的东西。你能告诉我为什么#[flow.name] 使用记录器
    • 伙计,查看源代码,似乎一个名为flow 的未记录的 MEL 变量,但不清楚它何时被绑定,何时不被绑定。显然在logger 中,但不是在set-variable 中。也许您可以尝试使用表达式组件:它可能会被绑定,因此您可以这样做:expression-component 中的flowVars.callerFlowName = flow.name
    猜你喜欢
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多