使用set-payload与表达式组件的Mule变量声明

时间:2014-11-15 10:58:59

标签: mule

从这个问题Mule expression variable scope,我理解:

  • 使用set-payload声明的变量类似于实例变量。
  • 在表达式组件中定义的变量类似于方法局部变量。

我的理解是否正确?我们如何访问表达式组件中的变量?

1 个答案:

答案 0 :(得分:1)

你的问题有问题...... 您不能使用set-payload声明变量... set-payload用于覆盖现有的消息有效负载。 您可以使用<set-variable>

设置变量

现在回到你的问题.. 是的,Mule中有两种类型的变量: -

  • 流量变量
  • 会话变量

如果您使用流量变量,则它是一个实例变量..变量的范围是 INVOCATION ..仅限于特定流量(和流) 在哪里使用会话变量 ..它的范围是全局,可以从配置中的任何流访问

所以现在..正如我所说,你可以使用<set-variable>声明一个变量..在这里声明变量你需要声明它的范围 ...这是 INVOCATION SESSION

同样,如果使用表达式组件声明变量,则需要将变量声明为 INVOCATION SESSION

例如..请参阅以下内容: -

<set-session-variable variableName="sessionId" value="#[message.id+’@’+mule.nodeId]" />
<expression-component>sessionVars.sessionId = message.id+'@'+mule.nodeId;</expression-component>

您可以使用<set-variable>表达式组件

设置变量

您在此处设置为全球,或者您可以说是会话变量

请找以下内容供您参考: - http://blogs.mulesoft.org/mule-school-the-mulemessage-property-scopes-and-variables/

更新的答案: -

是。你可以在set-variable或expression中设置变量,你可以在任何地方访问变量,并且无论你在哪里声明它都无关紧要。

例如,如果要访问使用以下内容在set-session-variable中声明的表达式组件中的会话变量: - <set-session-variable variableName="sessionId" value="#[message.id+’@’+mule.nodeId]" />。 ....

您可以执行以下操作: -

将会话变量设置为有效负载<expression-component>payload=sessionVars.sessionId;</expression-component>

然后您可以使用记录器打印有效负载: -

<logger message="payload with sessionVars:-#[message.payload]" level="INFO" doc:name="Logger"/>  检查值