MuleSoft - 流控制和转换器



流控制(路由器)

流控制组件的主要任务是接收输入的 Mule 事件并将其路由到一个或多个独立的组件序列。它基本上是将输入的 Mule 事件路由到其他组件序列。因此,它也被称为路由器。选择和散布-收集路由器是流控制组件下最常用的路由器。

选择路由器

顾名思义,此路由器应用 DataWeave 逻辑来选择两个或多个路由之一。如前所述,每个路由都是 Mule 事件处理器的独立序列。我们可以将选择路由器定义为根据用于评估消息内容的一组 DataWeave 表达式动态路由消息流的路由器。

选择路由器的示意图

使用选择路由器的效果就像在流中添加条件处理或大多数编程语言中的if/then/else代码块。以下是具有三个选项的选择路由器的示意图。其中一个是默认路由器。

Choice Router

散布-收集路由器

另一个最常用的路由事件处理器是散布-收集组件。顾名思义,它基于散布(复制)和收集(合并)的基本原理。我们可以通过以下两点了解其工作原理:

  • 首先,此路由器将 Mule 事件复制(散布)到两个或多个并行路由。条件是每个路由必须是一个或多个事件处理器的序列,就像一个子流一样。在这种情况下,每个路由都将使用单独的线程创建 Mule 事件。每个 Mule 事件都将拥有自己的有效负载、属性以及变量。

  • 接下来,此路由器从每个路由收集创建的 Mule 事件,然后将它们合并到一个新的 Mule 事件中。之后,它将此合并的 Mule 事件传递到下一个事件处理器。这里的条件是,只有当每个路由都成功完成时,S-G 路由器才会将合并的 Mule 事件传递到下一个事件处理器。

散布-收集路由器的示意图

以下是具有四个事件处理器的散布-收集路由器的示意图。它并行执行每个路由,而不是顺序执行。

Scatter Gather Router

散布-收集路由器的错误处理

首先,我们必须了解在散布-收集组件中可能生成的错误类型。任何错误都可能在事件处理器中生成,导致散布-收集组件引发类型为Mule: COMPOSITE_ERROR的错误。此错误只有在每个路由失败或完成之后才会由 S-G 组件引发。

为了处理此错误类型,可以在散布-收集组件的每个路由中使用try 范围。如果错误由try 范围成功处理,则该路由肯定能够生成 Mule 事件。

转换器

假设如果我们想设置或删除 Mule 事件的任何一部分,转换器组件是最佳选择。转换器组件有以下类型:

删除变量转换器

顾名思义,此组件接收变量名称并从 Mule 事件中删除该变量。

配置删除变量转换器

下表显示了在配置删除变量转换器时需要考虑的字段名称及其说明:

序号 字段和说明
1

显示名称 (doc:name)

我们可以自定义它以在我们的 Mule 工作流中显示此组件的唯一名称。

2

名称 (variableName)

它表示要删除的变量的名称。

设置有效负载转换器

借助set-payload组件,我们可以更新消息的有效负载,该有效负载可以是字面字符串或 DataWeave 表达式。不建议将此组件用于复杂的表达式或转换。它可以用于简单的选择。

下表显示了在配置设置有效负载转换器时需要考虑的字段名称及其说明:

字段 用法 解释
值 (value) 必填 值字段是设置有效负载所必需的。它将接受字面字符串或 DataWeave 表达式,定义如何设置有效负载。例如“some string”
MIME 类型 (mimeType) 可选 它是可选的,但表示分配给消息有效负载的值的 MIME 类型。例如 text/plain。
编码 (encoding) 可选 它也是可选的,但表示分配给消息有效负载的值的编码。例如 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”中。

设置变量转换器

借助set variable组件,我们可以创建或更新变量以存储值,这些值可以是简单的字面值(如字符串、消息有效负载或属性对象),以便在 Mule 应用程序的流中使用。不建议将此组件用于复杂的表达式或转换。它可以用于简单的选择。

配置设置变量转换器

下表显示了在配置设置有效负载转换器时需要考虑的字段名称及其说明:

字段 用法 解释
变量名称 (variableName) 必填 它是必填字段,表示变量的名称。在提供名称时,请遵循命名约定,例如它必须包含数字、字符和下划线。
值 (value) 必填 值字段是设置变量所必需的。它将接受字面字符串或 DataWeave 表达式。
MIME 类型 (mimeType) 可选 它是可选的,但表示变量的 MIME 类型。例如 text/plain。
编码 (encoding) 可选 它也是可选的,但表示变量的编码。例如 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.
广告