从这个问题Mule expression variable scope,我理解:
我的理解是否正确?我们如何访问表达式组件中的变量?
答案 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"/>
检查值