Mulesoft 简明教程

MuleSoft - Flow Control and Transformers

Flow Control (Routers)

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

Choice Router

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

Schematic diagram of Choice Router

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

choice router

Scatter-Gather Router

另一种最常用的路由事件处理器是 Scatter-Gather component 。顾名思义,它基于分散(复制)和收集(合并)的基本原理工作。我们可以借助以下两点了解它的工作原理−

  1. 首先,此路由器将 Mule 事件复制(分散)到两个或多个并行路由。条件是每个路由都必须是一个或多个事件处理器的序列,就像一个子流程。在这种情况下,每个路由都将使用一个独立的线程创建一个 Mule 事件。每个 Mule 事件都有其自身的有效内容、属性以及变量。

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

Schematic Diagram of Scatter-Gather Router

以下是包含四个事件处理器的分散-收集路由器的原理图。它并行执行每个路由,而不是按顺序执行。

scatter gather router

Error Handling by Scatter-Gather Router

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

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

Transformers

假设我们想要设置或删除任何 Mule 事件的一部分,那么 Transformer 组件是最佳选择。Transformer 组件的类型如下−

Remove variable transformer

正如其名称所述,此组件采用变量名,并从此 Mule 事件中删除此变量。

Configuring removing variable transformer

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

Sr.No

Field & Explanation

1

Display Name (doc:name) 我们可自定义此选项,以在此 Mule 工作流程中显示此组件的唯一名称。

2

Name (variableName) 它代表要删除的变量的名称。

Set payload transformer

借助 set-payload 组件,我们可以更新消息的有效载荷,该有效载荷可以是文字字符串或 DataWeave 表达式。不建议针对复杂表达式或转换使用此组件。它可用于 selections 等简单表达式。

下表显示了在配置设置有效载荷转换器时要考虑的字段名称及其描述:

Field

Usage

Explanation

Value (value)

Mandatory

为设置有效载荷,需要字段值。它将接受文字字符串或 DataWeave 表达式,用于定义如何设置有效载荷。示例如下:“某个字符串”

Mime Type (mimeType)

Optional

此项是可选的,但它代表了分配给消息有效载荷的 MIME 类型。示例如下:text/plain。

Encoding (encoding)

Optional

它也是可选的,但表示分配给消息有效负载的值的编码。示例类似于 UTF-8。

我们可以通过 XML 配置代码设置有效负载 -

With Static Content - 以下 XML 配置代码将使用静态内容设置有效负载 -

<set-payload value = "{ 'name' : 'Gaurav', 'Id' : '2510' }"
   mimeType = "application/json" encoding = "UTF-8"/>

With Expression Content - 以下 XML 配置代码将使用表达式内容设置有效负载 -

<set-payload value = "#['Hi' ++ ' Today is ' ++ now()]"/>

以上示例将把今天的日期追加到消息有效负载“Hi”中。

Set Variable Transformer

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

Configuring set variable transformer

下表显示了在配置设置有效载荷转换器时要考虑的字段名称及其描述:

Field

Usage

Explanation

Variable Name (variableName)

Mandatory

必需字段,它表示变量的名称。在给出名称时,请按照命名约定进行,例如它必须包含数字、字符和下划线。

Value (value)

Mandatory

为设置变量需要值字段。它将接受文字字符串或 DataWeave 表达式。

Mime Type (mimeType)

Optional

它是可选的,但表示变量的 MIME 类型。示例类似于 text/plain。

Encoding (encoding)

Optional

它也是可选的,但表示变量的编码。示例类似于 ISO 10646/Unicode(UTF-8)。

Example

以下示例将变量设置为消息有效负载 -

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.