MuleSoft - 消息处理器和脚本组件



脚本模块允许用户在 Mule 中使用脚本语言。简单来说,脚本模块可以交换用脚本语言编写的自定义逻辑。脚本可以用作实现或转换器。它们可以用于表达式求值,即用于控制消息路由。

Mule 支持以下脚本语言:

  • Groovy
  • Python
  • JavaScript
  • Ruby

如何安装脚本模块?

实际上,Anypoint Studio 自带脚本模块。如果在 Mule 调色板中找不到该模块,则可以使用 **+添加模块** 添加。添加后,我们可以在 Mule 应用程序中使用脚本模块操作。

实现示例

如前所述,我们需要将模块拖放到画布中以创建工作区并在我们的应用程序中使用它。以下是一个示例:

Install Scripting Modules

我们已经知道如何配置 HTTP Listener 组件;因此,我们将讨论配置脚本模块。我们需要按照以下步骤配置脚本模块:

步骤 1

从 Mule 调色板中搜索脚本模块,并将脚本模块的 **EXECUTE** 操作拖到您的流程中,如上所示。

步骤 2

现在,通过双击打开 Execute 配置选项卡。

步骤 3

在 **常规** 选项卡下,我们需要在 **代码文本窗口** 中提供如下所示的代码:

Code Text Window

步骤 4

最后,我们需要从 execute 组件中选择 **引擎**。引擎列表如下:

  • Groovy
  • Nashorn (JavaScript)
  • jython (Python)
  • jRuby (Ruby)

上述执行示例在配置 XML 编辑器中的 XML 如下:

<scripting:execute engine="jython" doc:name = "Script">
   <scripting:code>
      def factorial(n):
         if n == 0: return 1
      return n * factorial(n-1)
      result = factorial(10)
   </scripting:code>
</scripting:execute>

消息源

Mule 4 的消息模型比 Mule 3 简化,从而更容易以一致的方式处理连接器中的数据,而不会覆盖信息。在 Mule 4 消息模型中,每个 Mule 事件包含两部分:**一条消息及其关联的变量**。

Mule 消息包含有效负载及其属性,其中属性主要是元数据,例如文件大小。

变量保存任意用户信息,例如操作结果、辅助值等。

入站

Mule 3 中的入站属性现在成为 Mule 4 中的属性。众所周知,入站属性存储通过消息源获得的有效负载的附加信息,但在 Mule 4 中,这是通过属性来完成的。属性具有以下优点:

  • 借助属性,我们可以轻松查看可用的数据,因为属性是强类型的。

  • 我们可以轻松访问属性中包含的信息。

以下是 Mule 4 中典型消息的示例:

Inbound

出站

Mule 3 中的出站属性必须由 Mule 连接器和传输显式指定才能发送附加数据。但在 Mule 4 中,可以使用 DataWeave 表达式分别设置每个属性。它不会对主流程产生任何副作用。

例如,下面的 DataWeave 表达式将执行 HTTP 请求并生成标头和查询参数,而无需设置消息属性。这在以下代码中显示:

<http:request path = "M_issue" config-ref="http" method = "GET">
   <http:headers>#[{'path':'input/issues-list.json'}]</http:headers>
   <http:query-params>#[{'provider':'memory-provider'}]</http:query-params>
</http:request>

消息处理器

Mule 从消息源接收消息后,消息处理器的任务就开始了。Mule 使用一个或多个消息处理器来通过流程处理消息。消息处理器的主要任务是转换、过滤、丰富和处理消息,因为它通过 Mule 流程。

Mule 处理器的分类

以下是基于功能的 Mule 处理器类别:

  • **连接器** - 这些消息处理器发送和接收数据。它们还通过标准协议或第三方 API 将数据插入外部数据源。

  • **组件** - 这些消息处理器本质上是灵活的,并执行用各种语言(如 Java、JavaScript、Groovy、Python 或 Ruby)实现的业务逻辑。

  • **过滤器** - 它们过滤消息,并仅允许基于特定条件继续在流程中处理特定消息。

  • **路由器** - 此消息处理器用于控制消息流以进行路由、重新排序或拆分。

  • **作用域** - 它们基本上封装代码片段,用于在流程内定义细粒度的行为。

  • **转换器** - 转换器的作用是转换消息有效负载类型和数据格式,以促进系统之间的通信。

  • **业务事件** - 它们基本上捕获与关键绩效指标关联的数据。

  • **异常策略** - 这些消息处理器处理消息处理过程中发生的任何类型的错误。

广告