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 组件中可能生成的错误类型。事件处理器中可能生成任何错误,导致 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.