MuleSoft - 快速指南


MuleSoft - Mule ESB 简介

ESB 代表企业服务总线,它基本上是一种中间件工具,用于通过类似总线的基础设施将各种应用程序集成在一起。从根本上讲,它是一种旨在提供在集成应用程序之间移动工作的统一方法的体系结构。这样,借助ESB架构,我们就可以通过通信总线将不同的应用程序连接起来,使它们能够互不依赖地进行通信。

实施 ESB

ESB架构的主要重点是系统之间的解耦,让它们以稳定可控的方式进行通信。ESB 的实现可以通过以下方式在“总线”“适配器”的帮助下完成-

  • “总线”的概念是通过 JMS 或 AMQP 等消息传递服务器实现的,用于将不同的应用程序彼此解耦。

  • 应用程序和总线之间使用“适配器”的概念,负责与后端应用程序通信并将数据从应用程序格式转换为总线格式。

通过总线从一个应用程序传递到另一个应用程序的数据或消息采用规范格式,这意味着将有一种一致的消息格式。

该适配器还可以执行其他活动,例如安全、监视、错误处理和消息路由管理。

ESB 的指导原则

我们可以将这些原则称为核心集成原则。它们如下 -

  • 编排- 集成两个或多个服务以实现数据和流程之间的同步。

  • 转换- 将数据从规范格式转换为应用程序特定格式。

  • 传输- 处理 FTP、HTTP、JMS 等格式之间的协议协商。

  • 中介- 提供多个接口来支持服务的多个版本。

  • 非功能一致性- 还提供管理事务和安全性的机制。

ESB 的需要

ESB 架构使我们能够集成不同的应用程序,每个应用程序都可以通过它进行通信。以下是有关何时使用 ESB 的一些指南 -

  • 集成两个或多个应用程序- 当需要集成两个或多个服务或应用程序时,使用 ESB 架构是有益的。

  • 未来集成更多应用程序- 假设我们将来想要添加更多服务或应用程序,那么借助 ESB 架构就可以轻松完成。

  • 使用多个协议- 如果我们需要使用多个协议,如 HTTP、FTP、JMS 等,ESB 是正确的选择。

  • 消息路由- 如果我们需要基于消息内容和其他类似参数的消息路由,我们可以使用 ESB。

  • 组合和消费- 如果我们需要发布组合和消费服务,则可以使用 ESB。

P2P 集成与 ESB 集成

随着应用数量的增加,摆在开发者面前的一个大问题是如何连接不同的应用?这种情况是通过手工编码各种应用程序之间的连接来处理的。这称为点对点集成

P2P整合

僵化是点对点集成最明显的缺点。复杂性随着连接和接口数量的增加而增加。P-2-P 集成的缺点导致我们进行 ESB 集成。

ESB 是一种更灵活的应用程序集成方法。它将每个应用程序功能封装并公开为一组离散的可重用功能。没有应用程序直接与其他应用程序集成,而是通过 ESB 集成,如下所示 -

ESB 集成

为了管理集成,ESB 有以下两个组件 -

  • 服务注册表- Mule ESB 具有服务注册表/存储库,其中公开到 ESB 的所有服务都被发布和注册。它充当一个发现点,人们可以从这里使用其他应用程序的服务和功能。

  • 集中管理- 顾名思义,它提供了 ESB 内部发生的交互性能的事务流视图。

ESB 功能- VETRO 缩写通常用于总结 ESB 的功能。如下 -

  • V(验证)- 顾名思义,它验证模式验证。它需要一个验证解析器和最新的模式。一个示例是确认最新模式的 XML 文档。

  • E(丰富)- 它将附加数据添加到消息中。目的是使消息对目标服务更有意义和有用。

  • T(转换)- 将数据结构转换为规范格式或从规范格式转换。例如日期/时间、货币等的转换。

  • R(路由)- 它将路由消息并充当服务端点的看门人。

  • O(操作)- 该函数的主要工作是调用目标服务或与目标应用程序交互。他们在后端运行。

VETRO 模式为集成提供了整体灵活性,并确保只有一致且经过验证的数据才会在整个 ESB 中路由。

什么是 Mule ESB?

Mule ESB是MuleSoft提供的一个轻量级且高度可扩展的基于Java的企业服务总线(ESB)和集成平台。Mule ESB 允许开发人员轻松快速地连接应用程序。无论应用程序使用何种技术,Mule ESB 都可以轻松集成应用程序,使它们能够交换数据。Mule ESB 有以下两个版本 -

  • 社区版
  • 企业版

Mule ESB 的一个优点是我们可以轻松地从 Mule ESB 社区升级到 Mule ESB 企业版,因为这两个版本都构建在通用代码库上。

Mule ESB 的特性和功能

Mule ESB 拥有以下功能 -

  • 它具有简单的拖放图形设计。
  • Mule ESB 能够进行可视化数据映射和转换。
  • 用户可以获得数百个预构建的认证连接器。
  • 集中监控和管理。
  • 它提供强大的企业安全执行能力。
  • 它提供API管理的便利。
  • 有用于云/本地连接的安全数据网关。
  • 它提供服务注册表,暴露到 ESB 的所有服务都在其中发布和注册。
  • 用户可以通过基于 Web 的管理控制台进行控制。
  • 使用业务流分析器可以进行快速调试。

MuleSoft - Mule 项目

Mule 项目背后的动机是 -

  • 为了让程序员的事情变得更简单,

  • 需要轻量级和模块化的解决方案,可以从应用程序级消息传递框架扩展到企业范围的高度分布式框架。

Mule ESB 被设计为事件驱动的编程框架。它是事件驱动的,因为它与消息的统一表示相结合,并且可以通过可插拔模块进行扩展。它是程序化的,因为程序员可以轻松地植入一些额外的Behave,例如特定的消息处理或自定义数据转换。

历史

Mule项目的历史视角如下:

SourceForge项目

Mule 项目于 2003 年 4 月作为 SourceForge 项目启动,两年后发布了第一个版本并转移到 CodeHaus。通用消息对象 (UMO) API 是其架构的核心。UMO API 背后的想法是统一逻辑,同时保持它们与底层传输隔离。

1.0版本

它于 2005 年 4 月发布,包含大量传输。随后的许多其他版本的重点是调试和添加新功能。

2.0版本(采用Spring 2)

Mule 2 采用 Spring 2 作为配置和连接框架,但由于缺乏所需 XML 配置的表达能力,它被证明是一次重大修改。当 Spring 2 中引入基于 XML 模式的配置时,这个问题得到了解决。

使用 Maven 构建

在开发和部署时简化 Mule 使用的最大改进是 Maven 的使用。从1.3版本开始,开始使用Maven构建。

骡源

2006 年,MuleSource 成立,“以帮助支持和推动在关键任务企业应用程序中使用 Mule 的快速增长的社区”。事实证明,这是 Mule 项目的重要里程碑。

Mule ESB 的竞争对手

以下是 Mule ESB 的一些主要竞争对手 -

  • WSO2 ESB
  • Oracle 服务总线
  • WebSphere 消息代理
  • Aurea CX 平台
  • 费奥拉诺 ESB
  • WebSphere DataPower 网关
  • 工作日业务流程框架
  • Talend 企业服务总线
  • JBoss 企业服务总线
  • iWay服务经理

Mule的核心理念

正如所讨论的,Mule ESB 是一个轻量级且高度可扩展的基于 Java 的企业服务总线 (ESB) 和集成平台。无论应用程序使用何种技术,Mule ESB 都可以轻松集成应用程序,使它们能够交换数据。在本节中,我们将讨论 Mule 的核心概念如何发挥作用来实现这种集成。

为此,我们需要了解其架构和构建块。

建筑学

Mule ESB 的架构分为三层,即传输层、集成层和应用层,如下图所示 -

Mule核心概念

一般来说,可以执行以下三种类型的任务来配置和定制 Mule 部署 -

服务组件开发

此任务涉及开发或重用现有的 POJO 或 Spring Bean。POJOs 是一个具有属性的类,可生成 get 和 set 方法、云连接器。另一方面,Spring Beans 包含丰富消息的业务逻辑。

服务编排

此任务基本上提供涉及配置消息处理器、路由器、转换器和过滤器的服务中介。

一体化

Mule ESB 最重要的任务是集成各种应用程序,无论它们使用什么协议。为此,Mule 提供了允许在各种协议连接器上接收和发送消息的传输方法。Mule 支持许多现有的传输方法,或者我们也可以使用自定义的传输方法。

建筑模块

Mule 配置具有以下构建块 -

建筑模块

春豆

Spring beans的主要用途是构建服务组件。构建完 Spring 服务组件后,我们可以通过配置文件来定义它,或者在没有配置文件的情况下手动定义它。

代理商

它基本上是在 Mule Studio 之前在 Anypoint Studio 中创建的服务。一旦启动服务器,代理就会创建,一旦停止服务器,代理就会被销毁。

连接器

它是一个配置有特定于协议的参数的软件组件。它主要用于控制协议的使用。例如,JMS 连接器配置有一个Connection,并且该连接器将在负责实际通信的各个实体之间共享。

全局配置

顾名思义,该构建块用于设置全局属性和设置。

全球端点

它可以在“全局元素”选项卡中使用,该选项卡可以在流程中多次使用 -

全局消息处理器

顾名思义,它观察或修改消息或消息流。转换器和过滤器是全局消息处理器的示例。

变压器- 变压器的主要工作是将数据从一种格式转换为另一种格式。它可以全局定义并且可以在多个流中使用。

过滤器- 过滤器将决定应该处理哪个 Mule 消息。过滤器基本上指定了处理消息并将其路由到服务必须满足的条件。

楷模

与代理相反,它是在工作室中创建的服务的逻辑分组。我们可以自由地启动和停止特定模型内的所有服务。

服务- 服务是包装我们的业务逻辑或组件的服务。它还专门为该服务配置路由器、端点、变压器和过滤器。

端点- 它可以定义为服务将入站(接收)和出站(发送)消息的对象。服务通过端点连接。

流动

消息处理器使用流来定义源和目标之间的消息流。

Mule消息结构

完全封装在 Mule 消息对象下的 Mule 消息是通过 Mule 流在应用程序中传递的数据。Mule 消息的结构如下图所示:

消息结构

如上图所示,Mule Message 由两个主要部分组成 -

标头

它只不过是消息的元数据,由以下两个属性进一步表示 -

入站属性- 这些是由消息源自动设置的属性。用户无法操纵或设置它们。实际上,入站属性是不可变的。

出站属性- 这些属性包含像入站属性一样的元数据,并且可以在流程过程中设置。它们可以由 Mule 自动设置,也可以由用户手动设置。实际上,出站属性是可变的。

当消息通过传输从一个流的出站端点传递到另一流的入站端点时,出站属性将成为入站属性。

当消息通过流引用而不是连接器传递到新流时,出站属性仍保留为出站属性。

有效载荷

消息对象携带的实际业务消息称为负载。

变量

它可以被定义为关于消息的用户定义的元数据。基本上,变量是有关处理消息的应用程序所使用的消息的临时信息。它并不意味着与消息一起传递到目的地。它们分为以下三种类型 -

流变量- 这些变量仅适用于它们存在的流。

会话变量- 这些变量适用于同一应用程序中的所有流。

记录变量- 这些变量仅适用于作为批次的一部分处理的记录。

附件和额外有效载荷

这些是关于消息有效负载的一些额外元数据,不一定每次都出现在消息对象中。

MuleSoft - 我们机器中的骡子

在前面的章节中,我们学习了 Mule ESB 的基础知识。在本章中,让我们学习如何安装和配置它。

先决条件

在我们的计算机上安装 Mule 之前,我们需要满足以下先决条件 -

Java 开发工具包 (JDK)

在安装 MULE 之前,请验证您的系统上是否有支持的 Java 版本。建议使用 JDK 1.8.0 以在系统上成功安装 Mule。

操作系统

Mule 支持以下操作系统 -

  • MacOS 10.11.x
  • HP-UX 11iV3
  • 操作系统7.2
  • Windows 2016 服务器
  • Windows 2012 R2 服务器
  • Windows 10
  • Windows8.1
  • 索拉里斯11.3
  • RHEL 7
  • Ubuntu服务器18.04
  • Linux 内核 3.13+

数据库

由于 Mule Runtime 作为独立服务器运行,因此不需要应用程序服务器或数据库。但是,如果我们需要访问数据存储或想要使用应用程序服务器,可以使用以下支持的应用程序服务器或数据库 -

  • 甲骨文11g
  • 甲骨文12c
  • MySQL 5.5+
  • IBM DB2 10
  • PostgreSQL 9
  • 德比10
  • 微软 SQL Server 2014

系统要求

在系统上安装 Mule 之前,它必须满足以下系统要求 -

  • 虚拟化环境中至少 2 GHz CPU 或 1 个虚拟 CPU
  • 至少 1 GB 内存
  • 至少 4 GB 存储空间

下载骡子

要下载 Mule 4 二进制文件,请单击链接 https://www.mulesoft.com/lp/dl/mule-esb-enterprise,它将引导您进入 MuleSoft 的官方网页,如下所示 -

下载骡子

通过提供必要的详细信息,您可以获得 Zip 格式的 Mule 4 二进制文件。

安装并运行 Mule

下载 Mule 4 二进制文件后,将其解压并 为解压文件夹内的 Mule 目录设置一个名为MULE_HOME的环境变量。

例如,在 Windows 和 Linux/Unix 环境中,可以在下载目录中为版本 4.1.5 设置环境变量,如下所示 -

Windows环境

$ env:MULE_HOME=C:\Downloads\mule-enterprise-standalone-4.1.5\

Unix/Linux 环境

$ export MULE_HOME=~/Downloads/mule-enterprise-standalone-4.1.5/

现在,为了测试 Mule 是否在您的系统中运行且没有任何错误,请使用以下命令 -

Windows环境

$ $MULE_HOME\bin\mule.bat

Unix/Linux 环境

$ $MULE_HOME/bin/mule

上述命令将在前台模式下运行 Mule。如果 Mule 正在运行,我们无法在终端上发出任何其他命令。在终端中按ctrl-c命令,将停止 Mule。

启动骡子服务

我们可以将 Mule 作为 Windows 服务启动,也可以将其作为 Linux/Unix 守护进程启动。

Mule 作为 Windows 服务

要将 Mule 作为 Windows 服务运行,我们需要遵循以下步骤 -

步骤 1 - 首先,在以下命令的帮助下安装它 -

$ $MULE_HOME\bin\mule.bat install

步骤 2 - 安装后,我们可以借助以下命令将 mule 作为 Windows 服务运行:

$ $MULE_HOME\bin\mule.bat start

Mule 作为 Linux/Unix 守护进程

要将 Mule 作为 Linux/Unix 守护进程运行,我们需要遵循以下步骤 -

步骤 1 - 在以下命令的帮助下安装它 -

$ $MULE_HOME/bin/mule install

步骤 2 - 安装后,我们可以借助以下命令将 mule 作为 Windows 服务运行 -

$ $MULE_HOME/bin/mule start

例子

以下示例将 Mule 作为 Unix 守护进程启动 -

$ $MULE_HOME/bin/mule start
MULE_HOME is set to ~/Downloads/mule-enterprise-standalone-4.1.5
MULE_BASE is set to ~/Downloads/mule-enterprise-standalone-4.1.5
Starting Mule Enterprise Edition...
Waiting for Mule Enterprise Edition.................
running: PID:87329

部署 Mule 应用程序

我们可以通过以下步骤部署我们的 Mule 应用程序 -

步骤 1 - 首先,启动 Mule。

步骤 2 - 一旦 Mule 启动,我们可以通过将 JAR 包文件移动到$MULE_HOME中的apps目录来部署 Mule 应用程序。

停止骡子服务

我们可以使用stop命令来停止 Mule。例如,以下示例将 Mule 作为 Unix 守护进程启动 -

$ $MULE_HOME/bin/mule stop
MULE_HOME is set to /Applications/mule-enterprise-standalone-4.1.5
MULE_BASE is set to /Applications/mule-enterprise-standalone-4.1.5
Stopping Mule Enterprise Edition...
Stopped Mule Enterprise Edition.

我们还可以使用remove命令从我们的系统中删除Mule服务或守护进程。以下示例将 Mule 作为 Unix 守护进程删除 -

$ $MULE_HOME/bin/mule remove
MULE_HOME is set to /Applications/mule-enterprise-standalone-4.1.5
MULE_BASE is set to /Applications/mule-enterprise-standalone-4.1.5
Detected Mac OSX:
Mule Enterprise Edition is not running.
Removing Mule Enterprise Edition daemon...

MuleSoft - Anypoint Studio

MuleSoft 的 Anypoint Studio 是一个用户友好的IDE(集成开发环境),用于设计和测试 Mule 应用程序。它是一个基于 Eclipse 的 IDE。我们可以轻松地从 Mule Palette 中拖动连接器。换句话说,Anypoint Studio是一个基于Eclipse的IDE,用于开发流程等。

先决条件

在所有操作系统(Windows、Mac 和 Linux/Unix)上安装 Mule 之前,我们需要满足以下先决条件。

Java 开发工具包 (JDK) - 在安装 Mule 之前,请验证您的系统上是否有受支持的 Java 版本。建议使用 JDK 1.8.0,以便在系统上成功安装 Anypoint。

下载并安装 Anypoint Studio

在不同操作系统上下载和安装 Anypoint Studio 的过程可能有所不同。接下来,在各种操作系统上下载和安装 Anypoint Studio 需要遵循以下步骤 -

在 Windows 上

要在 Windows 上下载并安装 Anypoint Studio,我们需要按照以下步骤操作 -

步骤 1 - 首先,单击链接https://www.mulesoft.com/lp/dl/studio并从自上而下的列表中选择 Windows 操作系统来下载 studio。

下载Anypoint Studio

步骤 2 - 现在,将其解压到“C:\”根文件夹中。

步骤 3 - 打开提取的 Anypoint Studio。

步骤 4 - 要接受默认工作区,请单击“确定”。首次加载时您将收到一条欢迎消息。

步骤 5 - 现在,单击“开始”按钮以使用 Anypoint Studio。

在 OS X 上

要在 OS X 上下载并安装 Anypoint Studio,我们需要按照以下步骤操作 -

步骤 1 - 首先,单击链接https://www.mulesoft.com/lp/dl/studio 并下载 studio。

在 OS X 上下载 Anypoint Studio

步骤 2 - 现在,将其提取。如果您使用的是操作系统版本 Sierra,请确保在启动之前将提取的应用程序移动到/Applications 文件夹。

步骤 3 - 打开提取的 Anypoint Studio。

步骤 4 - 要接受默认工作区,请单击“确定”。首次加载时您将收到一条欢迎消息。

步骤 5 - 现在,单击“开始”按钮以使用 Anypoint Studio。

如果您要使用工作区的自定义路径,请注意 Anypoint Studio 不会扩展 Linux/Unix 系统中使用的 ~ 波形符。因此,建议在定义工作空间时使用绝对路径。

在 Linux 上

要在 Linux 上下载并安装 Anypoint Studio,我们需要按照以下步骤操作 -

步骤 1 - 首先,单击链接https://www.mulesoft.com/lp/dl/studio并从自上而下的列表中选择 Linux 操作系统来下载 studio。

在Linux上下载

步骤 2 - 现在,将其提取。

步骤 3 - 接下来,打开提取的 Anypoint Studio。

步骤 4 - 要接受默认工作区,请单击“确定”。首次加载时您将收到一条欢迎消息。

步骤 5 - 现在,单击“开始”按钮以使用 Anypoint Studio。

如果您要使用工作区的自定义路径,请注意 Anypoint Studio 不会扩展 Linux/Unix 系统中使用的 ~ 波形符。因此,建议在定义工作空间时使用绝对路径。

还建议安装 GTK 版本 2 以在 Linux 中使用完整的 Studio 主题。

Anypoint Studio的特点

以下是 Anypoint studio 在构建 Mule 应用程序时提高生产力的一些功能 -

  • 它提供了在本地运行时内即时运行 Mule 应用程序。

  • Anypoint studio 为我们提供了可视化编辑器来配置 API 定义文件和 Mule 域。

  • 它具有嵌入式单元测试框架,提高了生产力。

  • Anypoint studio 为我们提供了部署到 CloudHub 的内置支持。

  • 它能够与 Exchange 集成,以便从其他 Anypoint Platform 组织导入模板、示例、定义和其他资源。

MuleSoft - 发现 Anypoint Studio

Anypoint Studio 编辑器帮助我们设计应用程序、API、属性和配置文件。除了设计之外,它还可以帮助我们编辑它们。我们有 Mule 配置文件编辑器用于此目的。要打开此编辑器,请双击/src/main/mule中的应用程序 XML 文件。

为了使用我们的应用程序,我们在 Mule 配置文件编辑器下有以下三个选项卡。

消息流选项卡

此选项卡提供工作流程的直观表示。它基本上包含一个画布,可以帮助我们直观地检查流程。如果您想将 Mule Palette 中的事件处理器添加到画布中,只需拖放即可,它就会反映在画布中。

消息流选项卡

通过单击事件处理器,您可以获得包含所选处理器属性的 Mule 属性视图。我们也可以编辑它们。

全局元素选项卡

该选项卡包含模块的全局 Mule 配置元素。在此选项卡下,我们可以创建、编辑或删除配置文件。

全局元素选项卡

配置 XML 选项卡

顾名思义,它包含定义 Mule 应用程序的 XML。您在此处所做的所有更改都将反映在画布以及“消息流”选项卡下的事件处理器的属性视图中。

配置 XML 选项卡

意见

对于活动编辑器,Anypoint studio 在视图的帮助下为我们提供了项目元数据、属性的图形表示。用户可以在 Mule 项目中移动、关闭以及添加视图。以下是 Anypoint studio 中的一些默认视图 -

包浏览器

Package Explorer视图的主要任务是显示Mule项目中包含的项目文件夹和文件。我们可以通过单击旁边的箭头来展开或收缩 Mule 项目文件夹。双击文件夹或文件即可将其打开。看看它的屏幕截图 -

包浏览器

骡子调色板

Mule Palette 视图显示事件处理器,如范围、过滤器和流控制路由器以及模块及其相关操作。Mule Palette 视图的主要任务如下 -

  • 此视图帮助我们管理项目中的模块和连接器。
  • 我们还可以从 Exchange 添加新元素。

看看它的屏幕截图 -

骡子调色板

骡子属性

顾名思义,它允许我们编辑画布中当前选择的模块的属性。Mule 属性视图包括以下内容 -

  • DataSense Explorer 提供有关有效负载数据结构的实时信息。

  • 入站和出站属性(如果可用)或变量。

下面是屏幕截图 -

骡子属性

安慰

每当我们创建或运行 Mule 应用程序时,嵌入式 Mule 服务器都会显示 Studio 报告的事件和问题(如果有)列表。控制台视图包含该嵌入式 Mule 服务器的控制台。看看它的屏幕截图 -

安慰

问题查看

在进行 Mule 项目时,我们可能会遇到很多问题。所有这些问题都显示在“问题”视图中。下面是截图

问题查看

观点

在 Anypoint Studio 中,它是按指定排列的视图和编辑器的集合。Anypoint Studio 有两种视角 -

Mule Design Perspective - 这是我们在 Studio 中获得的默认视角。

Mule 调试视角- Anypoint Studio 提供的另一个视角是 Mule 调试视角。

另一方面,我们还可以创建自己的视角,并可以添加或删除任何默认视图。

MuleSoft - 创建第一个 Mule 应用程序

在本章中,我们将在 MuleSoft 的 Anypoint Studio 中创建第一个 Mule 应用程序。为了创建它,首先我们需要启动 Anypoint Studio。

启动 Anypoint Studio

单击 Anypoint Studio 启动它。如果您是第一次启动它,那么您将看到以下窗口 -

启动 Anypoint Studio

Anypoint Studio的用户界面

单击“转到工作区”按钮后,它将引导您进入 Anypoint Studio 的用户界面,如下所示 -

Anypoint Studio的用户界面

创建 Mule 应用程序的步骤

为了创建您的 Mule 应用程序,请按照以下步骤操作 -

创建新项目

创建 Mule 应用程序的第一步是创建一个新项目。可以通过路径FILE → NEW → Mule Project来完成,如下所示 -

创建 Mule 应用程序的步骤

命名项目

如上所述,单击新的 Mule 项目后,它将打开一个新窗口,询问项目名称和其他规格。指定项目名称“ TestAPP1 ”,然后单击“完成”按钮。

命名项目

单击 Finish 按钮后,它将打开为您的 MuleProject 构建的工作区,即'TestAPP1'。您可以看到上一章中描述的所有编辑器视图。

测试APP1

配置连接器

在这里,我们将为 HTTP Listener 构建一个简单的 Mule 应用程序。为此,我们需要将 HTTP Listener 连接器从 Mule Palette 拖放到工作区,如下所示 -

配置连接器

现在,我们需要配置它。单击基本设置下连接器配置后的绿色 + 符号,如上所示。

HTTP 侦听器配置

单击“确定”后,您将返回 HTTP Listener 属性页面。现在我们需要在“常规”选项卡下提供路径。在此特定示例中,我们提供了/FirstAPP作为路径名。

第一个应用程序路径名称

配置设置有效负载连接器

现在,我们需要一个设置有效负载连接器。我们还需要在“设置”选项卡下给出其值,如下所示 -

有效负载连接器

这是我的第一个 Mule 应用程序,是本示例中提供的名称。

运行 Mule 应用程序

现在,保存并单击“作为 Mule 应用程序运行”,如下所示 -

作为 Mule 应用程序运行

我们可以在部署应用程序的控制台下检查它,如下所示 -

第一个骡子应用程序

它表明您已经成功构建了您的第一个 Mule 应用程序。

验证 Mule 应用程序

现在,我们需要测试我们的应用程序是否正在运行。转到 POSTMAN(一个 Chrome 应用程序)并输入 URL:http://localhost:8081。它显示了我们在构建 Mule 应用程序时提供的消息,如下所示 -

验证 Mule 应用程序

MuleSoft - DataWeave 语言

DataWeave 基本上是一种 MuleSoft 表达语言。它主要用于访问和转换通过 Mule 应用程序接收到的数据。Mule运行时负责运行我们的Mule应用程序中的脚本和表达式,DataWeave与Mule运行时紧密集成。

DataWeave语言的特点

以下是 DataWeave 语言的一些重要特征 -

数据可以很容易地从一种格式转换为另一种格式。例如,我们可以将 application/json 转换为 application/xml。输入有效负载如下 -

{
   "title": "MuleSoft",
   "author": " tutorialspoint.com ",
   "year": 2019
}

以下是 DataWeave 中用于转换的代码 -

%dw 2.0
output application/xml
---
{
   order: {
      'type': 'Tutorial', 
      'title': payload.title, 
      'author': upper(payload.author), 
      'year': payload.year
   }
}

接下来,输出有效负载如下 -

<?xml version = '1.0' encoding = 'UTF-8'?>
<order>
   <type>Tutorial</type>
   <title>MuleSoft</title>
   <author>tutorialspoint.com</author>
   <year>2019</year>
</order>

转换组件可用于创建执行简单和复杂数据转换的脚本。

我们可以在我们需要的 Mule 事件的部分上访问和使用核心 DataWeave 函数,因为大多数 Mule 消息处理器都支持 DataWeave 表达式。

先决条件

在我们的计算机上使用 DataWeave 脚本之前,我们需要满足以下先决条件 -

  • 使用 Dataweave 脚本需要 Anypoint Studio 7。

  • 安装 Anypoint Studio 后,我们需要设置一个带有转换消息组件的项目才能使用 DataWeave 脚本。

使用 DataWeave 脚本的步骤和示例

为了使用 DataWeave scrip,我们需要按照以下步骤操作 -

步骤1

首先,我们需要建立一个新项目,就像我们在上一章中所做的那样,使用File → New → Mule Project

第2步

接下来,我们需要提供项目的名称。对于这个例子,我们给出的名称是Mule_test_script

步骤3

现在,我们需要将Transform Message 组件Mule Palette 选项卡拖到canvas中。如下所示 -

数据编织脚本

步骤4

接下来,在“转换消息”组件选项卡中,单击“预览”以打开“预览”窗格。我们可以通过单击“预览”旁边的空白矩形来扩展源代码区域。

步骤5

现在,我们可以开始使用 DataWeave 语言编写脚本。

例子

以下是将两个字符串连接成一个的简单示例 -

转换消息组件

上面的 DataWeave 脚本有一个键值对({ myString: ("hello" ++ "World") }),它将两个字符串连接成一个。

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

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

Mule 支持以下脚本语言 -

  • 格罗维
  • Python
  • JavaScript
  • Ruby

如何安装脚本模块?

实际上,Anypoint Studio 附带了脚本模块。如果你在 Mule Palette 中没有找到该模块,那么可以使用+Add Module添加它。添加后,我们就可以在Mule应用程序中使用脚本模块操作了。

实施示例

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

安装脚本模块

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

步骤1

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

第2步

现在,双击打开“执行配置”选项卡。

步骤3

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

代码文本窗口

步骤4

最后,我们需要从执行组件中选择引擎。引擎列表如下 -

  • 格罗维
  • 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 中典型消息的示例 -

入境

出境

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)实现的业务逻辑。

  • 过滤器- 它们过滤消息,并根据特定标准仅允许特定消息在流中继续处理。

  • 路由器- 该消息处理器用于控制消息流的路由、重新排序或拆分。

  • 范围- 基本上是为了在流程中定义细粒度Behave而包装代码片段。

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

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

  • 异常策略- 这些消息处理器处理消息处理期间发生的任何类型的错误。

MuleSoft - 核心组件和配置

Mule最重要的能力之一是它可以通过组件进行路由、转换和处理,因此组合了各种元素的Mule应用程序的配置文件非常大。

以下是 Mule 提供的配置模式类型 -

  • 简单的服务模式
  • 验证器
  • HTTP代理
  • WS代理

配置组件

在 Anypoint studio 中,我们可以按照以下步骤来配置组件 -

步骤1

我们需要拖动我们希望在 Mule 应用程序中使用的组件。例如,这里我们使用 HTTP 侦听器组件,如下所示 -

配置组件

第2步

接下来,双击该组件以获取配置窗口。对于 HTTP 侦听器,如下所示 -

配置窗口

步骤3

我们可以根据项目的要求配置组件。举例来说,我们为 HTTP 监听器组件做了 -

HTTP 侦听器组件

核心组件是 Mule 应用程序中工作流程的重要构建块之一。处理 Mule 事件的逻辑是由这些核心组件提供的。在 Anypoint studio 中,要访问这些核心组件,您可以单击 Mule Palette 中的 Core,如下所示 -

应用骡调色板

以下是各种核心组件及其在 Mule 4 中的工作情况-

定制商务活动

该核心组件用于收集有关流以及处理 Mule 应用程序中业务事务的消息处理器的信息。换句话说,我们可以使用自定义业务事件组件在我们的工作流程中添加以下内容 -

  • 元数据
  • 关键绩效指标 (KPI)

如何添加KPI?

以下是在 Mule 应用程序的流程中添加 KPI 的步骤 -

步骤 1 - 按照 Mule Palette → Core → Components → Custom Business Event,将自定义业务事件组件添加到 Mule 应用程序中的工作流程中。

步骤 2 - 单击组件​​将其打开。

步骤 3 - 现在,我们需要提供显示名称和事件名称的值。

步骤 4 - 要从消息有效负载中捕获信息,请添加 KPI,如下所示 -

  • 指定 KPI 的名称(键)(跟踪:元数据元素)和值。该名称将用于 Runtime Manager 的搜索界面。

  • 给出一个值,可以是任何 Mule 表达式。

例子

下表包含具有名称和值的 KPI 列表 -

姓名 表达/值
学生名册编号 #[有效负载['RollNo']]
学生姓名 #[有效负载['名称']]

动态评估

该核心组件用于在 Mule 应用程序中动态选择脚本。我们还可以通过转换消息组件使用硬核脚本,但使用动态评估组件是更好的方法。该核心组件的工作原理如下 -

  • 首先,它评估一个应该生成另一个脚本的表达式。
  • 然后它评估该脚本以获得最终结果。

通过这种方式,它允许我们动态选择脚本而不是对其进行硬编码。

例子

以下是通过 Id 查询参数从数据库选择脚本并将该脚本存储在名为MyScript的变量中的示例。现在,动态评估组件将访问该变量以调用脚本,以便它可以从UName查询参数添加名称变量。

流程的 XML 配置如下:

<flow name = "DynamicE-example-flow">
   <http:listener config-ref = "HTTP_Listener_Configuration" path = "/"/>
   <db:select config-ref = "dbConfig" target = "myScript">
      <db:sql>#["SELECT script FROM SCRIPTS WHERE ID = 
         $(attributes.queryParams.Id)"]
      </db:sql>
   </db:select>
   <ee:dynamic-evaluate expression = "#[vars.myScript]">
      <ee:parameters>#[{name: attributes.queryParams.UName}]</ee:parameters>
   </ee:dynamic-evaluate>
</flow>

该脚本可以使用上下文变量,例如消息、有效负载、变量或属性。但是,如果要添加自定义上下文变量,则需要提供一组键值对。

配置动态评估

下表提供了配置动态评估组件的方法 -

场地 价值 描述 例子
表达 数据编织表达式 它指定要在最终脚本中求值的表达式。 表达式=“#[vars.generateOrderScript]”
参数 数据编织表达式 它指定键值对。 #[{加入者:'和',id:payload.user.id}]

流量参考组件

如果您想将 Mule 事件路由到另一个流或子流并在同一个 Mule 应用程序中返回,那么流引用组件是正确的选择。

特征

以下是该核心组件的特征 -

  • 这个核心组件允许我们将整个引用流视为当前流中的单个组件。

  • 它将 Mule 应用程序分解为离散且可重用的单元。例如,流程定期列出文件。它可能引用另一个处理列表操作输出的流。

  • 这样,我们可以附加指向处理流程的流程引用,而不是附加整个处理步骤。下面的屏幕截图显示流参考核心组件指向名为ProcessFiles的子流。

流量参考组件

在职的

Flow Ref 组件的工作原理可以借助下图来理解 -

主要工作流程

该图显示了当一个流引用同一应用程序中的另一个流时,Mule 应用程序中的处理顺序。当 Mule 应用程序中的主要工作流程触发时,Mule 事件会遍历并执行该流程,直到 Mule 事件到达流程引用。

到达流程引用后,Mule 事件从头到尾执行引用的流程。一旦 Mule 事件执行完 Ref Flow,它就会返回到主流程。

例子

为了更好地理解,让我们在 Anypoint Studio 中使用这个组件。在这个例子中,我们使用 HTTP 监听器来获取消息,就像我们在上一章中所做的那样。因此,我们可以拖放组件并进行配置。但对于这个例子,我们需要添加一个子流组件并在其下设置有效负载组件,如下所示 -

Anypoint Studio 中的组件

接下来,我们需要通过双击来配置Set Payload 。这里我们给出的值是“子流程已执行”,如下所示 -

设置有效负载

成功配置子流程组件后,我们需要在设置主流程的有效负载之后设置流程引用组件,我们可以从 Mule Palette 中拖放该组件,如下所示 -

子流组件

接下来,在配置流引用组件时,我们需要在通用选项卡下选择流名称,如下所示 -

选择流程名称

现在,保存并运行该应用程序。要对此进行测试,请转到 POSTMAN 并在 URL 栏中输入http:/localhost:8181/FirstAPP ,您将收到消息“子流程已执行”。

邮差

记录器组件

名为 logger 的核心组件通过记录错误消息、状态通知、有效负载等重要信息来帮助我们监控和调试 Mule 应用程序。在 AnyPoint studio 中,它们出现在 Console

优点

以下是记录器组件的一些优点 -

  • 我们可以在工作流程中的任何位置添加这个核心组件。
  • 我们可以将其配置为记录我们指定的字符串。
  • 我们可以将其配置为我们编写的 DataWeave 表达式的输出。
  • 我们还可以将其配置为字符串和表达式的任意组合。

例子

下面的示例在浏览器的设置有效负载中显示消息“Hello World”,并记录该消息。

记录器组件

以下是上述示例中流程的 XML 配置 -

<http:listener-config name = "HTTP_Listener_Configuration" host = "localhost" port = "8081"/>
<flow name = "mymuleprojectFlow">
   <http:listener config-ref="HTTP_Listener_Configuration" path="/"/>
   <set-payload value="Hello World"/>
   <logger message = "#[payload]" level = "INFO"/>
</flow>

传输消息组件

转换消息组件,也称为传输组件,允许我们将输入数据转换为新的输出格式。

构建转型的方法

我们可以借助以下两种方法来构建我们的转换 -

拖放编辑器(图形视图) - 这是构建转换的第一个也是最常用的方法。在此方法中,我们可以使用该组件的可视化映射器来拖放传入数据结构的元素。例如,在下图中,两个树视图显示了输入和输出的预期元数据结构。连接输入和输出字段的线表示两个树视图之间的映射。

传输消息组件

脚本视图- 转换的可视化映射也可以在 DataWeave(一种 Mule 代码语言)的帮助下表示。我们可以为一些高级转换进行编码,例如聚合、标准化、分组、连接、分区、旋转和过滤。下面给出了示例 -

转换源

该核心组件基本上接受变量、属性或消息有效负载的输入和输出元数据。我们可以为以下内容提供特定格式的资源 -

  • CSV
  • 模式
  • 平面文件架构
  • JSON
  • 对象类
  • 简单型
  • XML模式
  • Excel 列名称和类型
  • 固定宽度列名称和类型

MuleSoft - 端点

端点基本上包括那些在 Mule 应用程序的工作流程中触发或启动处理的组件。它们在 Anypoint Studio 中称为Source ,在 Mule 的 Design Center 中称为 Triggers 。Mule 4 中的一个重要端点是Scheduler 组件

调度程序端点

该组件适用于基于时间的条件,这意味着,它使我们能够在满足基于时间的条件时触发流程。例如,调度程序可以每隔(比如 10 秒)触发一个事件来启动 Mule 工作流程。我们还可以使用灵活的 Cron 表达式来触发 Scheduler Endpoint。

关于调度程序的要点

在使用调度程序事件时,我们需要注意以下几点 -

  • Scheduler Endpoint 遵循运行 Mule 运行时的机器的时区。

  • 假设如果一个 Mule 应用程序在 CloudHub 中运行,那么 Scheduler 将遵循 CloudHub Worker 运行所在区域的时区。

  • 在任何给定时间,只有一个由调度程序端点触发的流可以处于活动状态。

  • 在Mule运行时集群中,调度程序端点仅在主节点上运行或触发。

配置调度程序的方法

如上所述,我们可以配置一个调度程序端点以固定的时间间隔触发,或者我们也可以给出一个 Cron 表达式。

配置调度程序的参数(对于固定间隔)

以下是设置调度程序以定期触发流的参数 -

频率- 它基本上描述了调度程序端点将触发 Mule 流的频率。可以从“时间单位”字段中选择此时间单位。如果您没有为此提供任何值,它将使用默认值 1000。另一方面,如果您提供 0 或负值,那么它也会使用默认值。

启动延迟- 这是应用程序启动后首次触发 Mule 流之前必须等待的时间。启动延迟的值以与频率相同的时间单位表示。其默认值为 0。

时间单位- 它描述了频率和启动延迟的时间单位。时间单位的可能值为毫秒、秒、分钟、小时、天。默认值为毫秒。

配置调度程序的参数(对于 Cron 表达式)

实际上,Cron 是一个用于描述时间和日期信息的标准。如果您使用灵活的 Cron 表达式来触发 Scheduler,Scheduler 端点会跟踪每一秒,并在 Quartz Cron 表达式与时间-日期设置匹配时创建一个 Mule 事件。使用 Cron 表达式,事件可以仅触发一次或定期触发。

下表给出了六个所需设置的日期时间表达式 -

属性 价值
秒数 0-59
分钟 0-59
小时 0-23
一个月中的哪一天 1-31
1-12 或 1-12 月
一周中的天 1-7 或周日-周六

下面给出了调度程序端点支持的 Quartz Cron 表达式的一些示例 -

  • ½ * * * * ?− 表示调度程序每天每 2 秒运行一次。

  • 0 0/5 16 ** ?− 表示调度程序从每天下午 4 点开始到下午 4:55 结束,每 5 分钟运行一次。

  • 1 1 1 1, 5 * ? − 表示调度程序每年运行一月的第一天和四月的第一天。

例子

以下代码每秒记录消息“hi” -

<flow name = "cronFlow" doc:id = "ae257a5d-6b4f-4006-80c8-e7c76d2f67a0">
   <doc:name = "Scheduler" doc:id = "e7b6scheduler8ccb-c6d8-4567-87af-aa7904a50359">
      <scheduling-strategy>
         <cron expression = "* * * * * ?" timeZone = "America/Los_Angeles"/>
      </scheduling-strategy>
   </scheduler>
   <logger level = "INFO" doc:name = "Logger" 
      doc:id = "e2626dbb-54a9-4791-8ffa-b7c9a23e88a1" message = '"hi"'/>
</flow>

MuleSoft - 流量控制和变压器

流量控制(路由器)

Flow Control 组件的主要任务是获取输入的 Mule 事件并将其路由到一个或多个单独的组件序列。它基本上是将输入 Mule 事件路由到其他组件序列。因此,它也被称为路由器。Choice 和 Scatter-Gather 路由器是流量控制组件下最常用的路由器。

选择路由器

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

Choice路由器示意图

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

选择路由器

分散-聚集路由器

另一个最常用的路由事件处理器是Scatter-Gather 组件。顾名思义,它的工作原理是分散(复制)和聚集(合并)。我们可以借助以下两点来理解它的工作原理 -

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

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

分散-聚集路由器示意图

以下是sc