MuleSoft - 流控制和转换器
流控制(路由器)
流控制组件的主要任务是接收输入的 Mule 事件并将其路由到一个或多个单独的组件序列。它基本上是将输入的 Mule 事件路由到其他组件序列。因此,它也被称为路由器。选择和分散-聚集路由器是流控制组件下最常用的路由器。
选择路由器
顾名思义,此路由器应用 DataWeave 逻辑来选择两个或多个路由中的一个。如前所述,每个路由都是一个单独的 Mule 事件处理器序列。我们可以将选择路由器定义为根据用于评估消息内容的一组 DataWeave 表达式动态地通过流路由消息的路由器。
选择路由器示意图
使用选择路由器的效果就像在大多数编程语言中向流或 if/then/else 代码块添加条件处理一样。以下是选择路由器的示意图,有三个选项。其中一个是默认路由器。

分散-聚集路由器
另一个最常用的路由事件处理器是 分散-聚集组件。顾名思义,它基于分散(复制)和聚集(合并)的基本原理工作。我们可以通过以下两点来理解它的工作原理 −
首先,该路由器将 Mule 事件复制(分散)到两个或多个并行路由。条件是每个路由必须是一个或多个事件处理器的序列,就像一个子流。在这种情况下,每个路由将使用单独的线程创建一个 Mule 事件。每个 Mule 事件都有自己的有效负载、属性以及变量。
接下来,该路由器从每个路由收集创建的 Mule 事件,然后将它们合并为一个新的 Mule 事件。此后,它将这个合并的 Mule 事件传递给下一个事件处理器。这里的条件是,只有当每条路由都成功完成时,S-G 路由器才会将合并的 Mule 事件传递给下一个事件处理器。
Scatter-Gather 路由器示意图
以下是具有四个事件处理器的 Scatter-Gather 路由器示意图。它并行执行每个路由,而不是按顺序执行。

Scatter-Gather 路由器的错误处理
首先,我们必须了解 Scatter-Gather 组件中可能生成的错误类型。事件处理器中可能生成任何错误,导致 Scatter-Gather 组件抛出类型为 Mule: COMPOSITE_ERROR 的错误。仅当每个路由失败或完成后,S-G 组件才会抛出此错误。
要处理此错误类型,可以在 Scatter-Gather 组件的每个路由中使用 try scope。如果错误被 try scope 成功处理,那么该路由肯定能够生成 Mule 事件。
Transformers
假设我们想设置或删除任何 Mule 事件的一部分,Transformer 组件是最佳选择。Transformer 组件有以下类型 −
删除变量转换器
顾名思义,此组件采用变量名称并从 Mule 事件中删除该变量。
配置删除变量转换器
下表显示了配置删除变量转换器时要考虑的字段名称及其描述 −
Sr.No | 字段及说明 |
---|---|
1 |
Display Name (doc:name) 我们可以自定义它以在我们的 Mule 工作流程中显示此组件的唯一名称。 |
2 | Name (variableName) 它表示要删除的变量的名称。 |
设置有效载荷转换器
借助set-payload组件,我们可以更新消息的有效载荷,该有效载荷可以是文字字符串或DataWeave表达式。不建议将此组件用于复杂的表达式或转换。它可以用于简单的表达式或转换,例如选择。
下表显示了配置设置有效载荷转换器时要考虑的字段名称及其描述 −
字段 | 用法 | 说明 |
---|---|---|
Value (value) | Mandatory | 设置有效负载需要值字段。它将接受文字字符串或 DataWeave 表达式来定义如何设置有效负载。示例就像"some string" |
Mime Type (mimeType) | Optional | 它是可选的,但表示分配给消息有效负载的值的 mime 类型。示例如 text/plain。 |
Encoding (encoding) | Optional | 它也是可选的,但表示分配给消息有效负载的值的编码。示例如 UTF-8。 |
我们可以通过 XML 配置代码设置有效负载 −
使用静态内容 − 以下 XML 配置代码将使用静态内容设置有效负载 −
<set-payload value = "{ 'name' : 'Gaurav', 'Id' : '2510' }" mimeType = "application/json" encoding = "UTF-8"/>
使用表达式内容 − 下面的 XML 配置代码将使用表达式内容设置有效负载 −
<set-payload value = "#['Hi' ++ ' Today is ' ++ now()]"/>
上述示例将今天的日期附加到消息有效负载"Hi"。
设置变量转换器
借助设置变量组件,我们可以创建或更新变量来存储值,这些值可以是简单的文字值,如字符串、消息有效负载或属性对象,供 Mule 应用程序流程中使用。不建议将此组件用于复杂的表达式或转换。它可以用于简单的表达式或转换,如选择。
配置设置变量转换器
下表显示了配置设置有效负载转换器时要考虑的字段名称及其描述 −
字段 | 用法 | 说明 |
---|---|---|
Variable Name (variableName) | Mandatory | 必填字段,表示变量的名称。命名时,请遵循命名约定,例如必须包含数字、字符和下划线。 |
Value (value) | Mandatory | 设置变量时需要值字段。它将接受文字字符串或 DataWeave 表达式。 |
Mime Type (mimeType) | Optional | 它是可选的,但表示变量的 mime 类型。示例如 text/plain。 |
Encoding (encoding) | Optional | 它也是可选的,但表示变量的编码。示例如 ISO 10646/Unicode(UTF-8)。 |
示例
下面的示例将变量设置为消息有效负载 −
Variable Name = msg_var Value = payload in Design center and #[payload] in Anypoint Studio
类似地,下面的示例将变量设置为消息有效负载 −
Variable Name = msg_var Value = attributes in Design center and #[attributes] in Anypoint Studio.