使用set payload vs expression组件的Mule变量声明

使用set payload vs expression组件的Mule变量声明,mule,Mule,通过这个问题,我了解到: 使用集合有效负载声明的变量类似于实例变量 表达式组件中定义的变量类似于方法局部变量 我的理解正确吗?如何访问表达式组件中的变量?您的问题中有错误。。 无法使用set payload声明变量。。。设置有效负载用于覆盖现有的消息有效负载。。 您可以使用 现在回到你的问题。。 是,Mule中有两种类型的变量:- 流量变量 会话变量 如果使用流变量,则它是一个实例变量。。变量的作用域是调用。。仅限于特定流(和子流)的 其中,就好像您使用了会话变量一样。。它的作用域是全局

通过这个问题,我了解到:

  • 使用集合有效负载声明的变量类似于实例变量
  • 表达式组件中定义的变量类似于方法局部变量

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

您的问题中有错误。。 无法使用set payload声明变量。。。设置有效负载用于覆盖现有的消息有效负载。。 您可以使用

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

  • 流量变量
  • 会话变量
如果使用流变量,则它是一个实例变量。。变量的作用域是调用。。仅限于特定流(和子流)的 其中,就好像您使用了会话变量一样。。它的作用域是全局的,可以从配置中的任何流访问

所以现在。。正如我所说,您可以使用
声明变量。。在这里声明变量时,您需要声明它的范围。。。这是调用会话

类似地,如果使用表达式组件声明变量,则需要将变量声明为调用会话

例如。。见下文:-

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

sessionVars.sessionId=message.id+'@'+mule.nodeId;
在这里,您可以使用
表达式组件设置变量

您在这里设置为一个全局,或者您可以说是一个会话变量

请查找以下内容以供参考:-

更新答案:-

是的。您可以在set variable或expression中设置变量,并且可以在任何位置访问变量,无论您在何处声明

例如,如果要访问表达式组件中的会话变量,您已使用以下命令在set session variable中声明:-

您可以执行以下操作:-

将会话变量设置为payload
payload=sessionVars.sessionId

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


要检查值

问题中的错误是输入错误。我的意图是询问,
设置变量vs表达式组件
。你消除了我的疑虑。我们可以在表达式组件中访问使用set variable声明的变量吗?谢谢。我不能在
表达式组件中声明/设置一个变量,并在流中的某些地方使用它吗?是的,我是这么说的。。您可以将其设置在任何位置,也可以从其范围内的任何位置访问它。。如果使用会话变量,它的作用域将贯穿所有流。。如果使用流变量,则可以在流中的任何位置访问它。。因此,根据您的问题,如果您在expression组件中设置会话变量,您可以使用Mule expression语言在Mule流中访问它。。例如在记录器中:-