Mulesoft 简明教程

MuleSoft - Quick Guide

MuleSoft - Introduction to Mule ESB

ESB 表示 Enterprise Service Bus ,它基本上是一个中间件工具,用于通过类似于总线的架构将各种应用程序集成在一起。从根本上说,它是一种设计,用于为集成应用程序之间的工作移动提供统一的手段。通过这种方式,在 ESB 架构的帮助下,我们可以通过通信总线连接不同的应用程序,并使它们能够在不相互依赖的情况下进行通信。

Implementing ESB

ESB 架构的主要重点是将系统彼此解耦,并允许它们以稳定且可控的方式进行通信。ESB 的实现可以通过以下方式借助 ‘Bus’‘Adapter’ 来完成:

  1. 通过 JMS 或 AMQP 等消息传递服务器实现的“总线”概念用于将不同的应用程序相互解耦。

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

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

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

ESB’s Guiding Principles

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

  1. Orchestration - 集成两个或多个服务以实现数据和过程之间的同步。

  2. Transformation - 将数据从规范格式转换为特定于应用程序的格式。

  3. Transportation - 处理 FTP、HTTP、JMS 等格式之间的协议协商。

  4. Mediation − 提供多重接口以支持服务的多个版本。

  5. Non-functional consistency − 提供用于管理事务和安全性的机制。

Need of ESB

ESB 架构使我们能够集成不同的应用程序,其中每个应用程序都可以通过它来通信。以下是在何时使用 ESB 的一些指南 −

  1. Integrating two or more applications − 当需要集成两个或更多个服务或应用程序时,使用 ESB 架构是有益的。

  2. Integration of more applications in future − 假设如果将来我们想要添加更多服务或应用程序,那么借助 ESB 架构可以轻松完成。

  3. Using multiple protocols − 万一我们需要使用多个协议,如 HTTP、FTP、JMS 等,那么 ESB 是正确选择。

  4. Message routing − 如果我们需要基于消息内容和其他类似参数进行消息路由,那么我们可以使用 ESB。

  5. Composition and consumption − 如果我们需要发布服务供组合和消费,那么可以使用 ESB。

P2P integration vs. ESB integration

随着应用程序数量的增加,摆在开发人员面前的一个大问题是,如何连接不同的应用程序?这种情况可以通过手动编写各种应用程序之间的连接来处理。这称为 point-to-point integration

p2p integration

Rigidity 是点对点集成的最明显的缺点。连接和接口的数量越多,复杂性也会越大。P-2-P 集成的缺点导致了我们使用 ESB 集成。

ESB 是用于实现应用程序集成的更灵活的方式。它将每个应用程序功能封装并公开为一组离散的可重用功能。没有任何应用程序直接与其他应用程序集成,取而代之的是通过 ESB 来集成,如下所示 −

esb integration

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

  1. Service Registry − Mule ESB 具有服务注册表/存储库,其中公开到 ESB 中的所有服务都已发布并注册。它充当一个从其它应用程序中消费服务和功能的发现点。

  2. Centralized Administration − 正如名称所示,它提供了在 ESB 内发生的交互性能的事务流程视图。

ESB Functionality − VETRO 缩写通常用于总结 ESB 的功能。具体如下 −

  1. V (验证) − 正如名称所示,它会验证架构验证。它需要一个验证解析器和最新架构。XML 文档符合最新架构就是其中一个示例。

  2. E (丰富) − 它向消息中添加了额外的数据。其目的是使消息对目标服务更有意义并且更有用。

  3. T (转换) − 它将数据结构转换成规范化格式,或从规范化格式转换成其它格式。示例包括日期/时间、货币等的转换。

  4. *R(*路由) − 它会路由消息,充当服务端点的守门员。

  5. O (操作)−此功能的主要工作是调用目标服务或与目标应用程序交互。它们在后端运行。

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

What is Mule ESB?

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

  1. Community Edition

  2. Enterprise Edition

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

Features & Capabilities of Mule ESB

Mule ESB 具有以下功能−

  1. 它具有简单的拖放图形设计。

  2. Mule ESB 能够进行可视化数据映射和转换。

  3. 用户可以获得 100 多个预构建认证连接器。

  4. Centralized monitoring and administration.

  5. 它提供了强大的企业安全实施功能。

  6. 它提供了 API 管理功能。

  7. 它为云/内部连接提供安全的数据网关。

  8. 它提供了服务注册表,其中发布和注册了公开到 ESB 中的所有服务。

  9. 用户可以通过基于 Web 的管理控制台进行控制。

  10. 可以使用服务流分析器执行快速调试。

MuleSoft - The Mule Project

Mule项目的动机如下−

  1. 为程序员简化任务,

  2. 轻量级和模块化解决方案的需求,该解决方案可以从应用程序级消息传递框架扩展到企业级的高度可分发框架。

Mule ESB的设计基于事件驱动和以编程为基础的框架。它基于事件驱动,因为它结合了消息的统一表示方式,并且可以通过可插入模块进行扩展。它以编程为基础,因为程序员可以轻松地植入一些附加行为,例如特定消息处理或自定义数据转换。

History

Mule项目的背景如下−

SourceForge project

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

Version 1.0

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

Version 2.0 (Adoption of Spring 2)

Spring 2作为配置和连接框架被采纳到Mule 2中,但它被证明是一次重大的检修,因为缺少对必需的XML配置的表达力。当基于XML架构的配置被引入Spring 2时,此问题得到解决。

Building with Maven

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

MuleSource

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

Competitors of Mule ESB

以下是Mule ESB的主要竞争对手−

  1. WSO2 ESB

  2. Oracle Service Bus

  3. WebSphere Message Broker

  4. Aurea CX Platform

  5. Fiorano ESB

  6. WebSphere DataPower Gateway

  7. Workday Business Process Framework

  8. Talend Enterprise Service Bus

  9. JBoss Enterprise Service Bus

  10. iWay Service Manager

Mule’s Core Concept

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

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

Architecture

Mule ESB的架构具有三层,即传输层、集成层和应用程序层,如下图所示−

mule core concept

通常,可以执行以下三类任务来配置和定制Mule部署−

Service Component Development

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

Service Orchestration

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

Integration

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

Building Blocks

Mule配置具有以下构建块−

building blocks

Spring beans

Spring bean 的主要用途是构建服务组件。构建 Spring 服务组件后,如果用户没有配置文件,可以通过配置文件或手动定义服务组件。

Agents

它最初是 Anypoint Studio 中在 Mule Studio 之前创建的服务。一旦服务器启动,将会创建一个代理,一旦服务器停止,将会销毁该代理。

Connector

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

Global Configuration

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

Global Endpoints

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

Global Message Processor

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

Transformers - 转换器的主要工作是将数据从一种格式转换成另一种格式。可以在全局中定义,并可以在多个流程中使用。

Filters - 它是一个过滤器,将决定应该处理哪条 Mule 消息。过滤器基本上指定消息必须满足的条件,然后才能处理并路由到服务。

Models

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

Services - 服务是封装业务逻辑或组件的服务。它还专门为该服务配置了路由器、端点、转换器和过滤器。

Endpoints - 可以将其定义为一个对象,服务将在其上入站(接收)和出站(发送)消息。服务通过端点连接。

Flow

消息处理器使用流程在源与目标之间定义消息流。

Mule Message Structure

Mule 消息完全包装在 Mule 消息对象中,是通过 Mule 流程传递到应用程序中的数据。Mule 消息的结构在以下图表中显示:

message structure

正如上述图表中所示,Mule 消息包含两个主要部分:

Header

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

Inbound Properties - 这些属性由消息源自动设置。它们不能由用户操作或设置。本质上,入站属性是不可变的。

Outbound Properties - 这些属性是包含元数据的属性,比如入站属性,可以在流程期间设置。它们可以由 Mule 自动设置,也可以由用户手动设置。本质上,出站属性是可变的。

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

当消息通过 flow-ref 而不是连接器转到新流程时,出站属性仍保持出站属性。

Payload

消息对象承载的实际业务消息称为有效负载。

Variables

它可以定义为关于消息的用户自定义元数据。基本上,变量是有关于由正在处理该消息的应用程序使用的消息的暂时信息片段。它不应该与消息一起传递到其目的地。它们有以下三种类型 −

Flow variables − 这些变量仅适用于它们存在的流。

Session variables − 这些变量适用于同一应用程序中的所有流。

Record variables − 这些变量仅适用于作为一个批处理的一部分处理的记录。

Attachments and Extra Payload

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

MuleSoft - Mule in Our Machine

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

Prerequisites

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

Java Development Kit (JDK)

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

Operating System

Mule 支持以下操作系统−

  1. MacOS 10.11.x

  2. HP-UX 11iV3

  3. AIX 7.2

  4. Windows 2016 Server

  5. Windows 2012 R2 Server

  6. Windows 10

  7. Windows 8.1

  8. Solaris 11.3

  9. RHEL 7

  10. Ubuntu Server 18.04

  11. Linux Kernel 3.13+

Database

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

  1. Oracle 11g

  2. Oracle 12c

  3. MySQL 5.5+

  4. IBM DB2 10

  5. PostgreSQL 9

  6. Derby 10

  7. Microsoft SQL Server 2014

System Requirements

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

  1. 在虚拟化环境中至少 2 GHz CPU 或 1 个虚拟 CPU

  2. Minimum 1 GB RAM

  3. Minimum 4 GB storage

Download Mule

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

download mule

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

Install and Run Mule

现在在下载完 Mule 4 二进制文件后,解压缩它并设置一个名为 MULE_HOME 的环境变量,用于提取的文件夹中的 Mule 目录。

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

Windows Environments

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

Unix/Linux Environments

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

现在,要测试 Mule 是否在您的系统中无任何错误地运行,请使用以下命令−

Windows Environments

$ $MULE_HOME\bin\mule.bat

Unix/Linux Environments

$ $MULE_HOME/bin/mule

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

Start Mule Services

我们还可以将 Mule 作为 Windows 服务和 Linux/Unix 后台程序启动。

Mule as a Windows Service

若要作为 Windows 服务运行 Mule,我们需要按照如下步骤 −

Step 1 - 首先,借助以下命令安装它 −

$ $MULE_HOME\bin\mule.bat install

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

$ $MULE_HOME\bin\mule.bat start

Mule as a Linux/Unix Daemon

若要将 Mule 作为 Linux/Unix 守护进程运行,我们需要按照以下步骤操作:

Step 1 - 在安装它的帮助下使用以下命令进行安装:

$ $MULE_HOME/bin/mule install

Step 2 - 安装后,我们可以在以下命令的帮助下将 mule 作为 Windows 服务运行:

$ $MULE_HOME/bin/mule start

Example

以下示例将 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

Deploy Mule Apps

我们可以借助以下步骤部署我们的 Mule 应用程序:

Step 1 - 首先,启动 Mule。

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

Stop Mule Services

我们可以使用 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 (integration development environment) ,用于设计和测试 Mule 应用程序。这是一个基于 Eclipse 的 IDE。我们可以轻松地从 Mule Palette 中拖动连接器。换句话说,Anypoint Studio 是一个基于 Eclipse 的 IDE,用于开发流等。

Prerequisites

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

Java Development Kit (JDK) − 在安装 Mule 之前,检查你的系统是否拥有支持的 Java 版本。建议使用 JDK 1.8.0 在系统上成功安装 Anypoint。

Downloading and Installing Anypoint Studio

在不同的操作系统上下载并安装 Anypoint Studio 的步骤可能有所不同。接下来,以下是适用于各种操作系统的 Anypoint Studio 下载和安装步骤 −

On Windows

要在 Windows 上下载并安装 Anypoint Studio,我们需要执行以下步骤 −

Step 1 − 首先,单击链接 https://www.mulesoft.com/lp/dl/studio 并从下拉列表中选择 Windows 操作系统下载该工作室。

download anypoint studio

Step 2 − 现在,将其提取到 ‘C:\’ 根文件夹。

Step 3 − 打开提取的 Anypoint Studio。

Step 4 − 要接受默认工作区,请单击确定。首次加载时,您将收到欢迎消息。

Step 5 − 现在,单击入门按钮以使用 Anypoint Studio。

On OS X

要在 OS X 上下载并安装 Anypoint Studio,我们需要执行以下步骤 −

Step 1 − 首先,单击链接 https://www.mulesoft.com/lp/dl/studio 并下载该工作室。

download anypoint studio on os x

Step 2 − 现在,将其提取。如果你正在使用 OS 版本 Sierra,请务必在启动之前将提取的 App 移至 /Applications folder

Step 3 − 打开提取的 Anypoint Studio。

Step 4 − 要接受默认工作区,请单击确定。首次加载时,您将收到欢迎消息。

Step 5 − 现在,单击 Get Started 按钮以使用 Anypoint Studio。

如果你打算对工作区使用自定义路径,请注意 Anypoint Studio 不会展开 Linux/Unix 系统中使用的波浪号 (~)。因此,建议在定义工作区时使用绝对路径。

On Linux

要在 Linux 上下载并安装 Anypoint Studio,我们需要执行以下步骤 −

Step 1 − 首先,单击链接 https://www.mulesoft.com/lp/dl/studio 并从下拉列表中选择 Linux 操作系统下载该工作室。

download on linux

Step 2 − 现在,将其提取。

Step 3 − 接下来,打开提取的 Anypoint Studio。

Step 4 − 要接受默认工作区,请单击确定。首次加载时,您将收到欢迎消息。

Step 5 − 现在,单击入门按钮以使用 Anypoint Studio。

如果你打算对工作区使用自定义路径,请注意 Anypoint Studio 不会展开 Linux/Unix 系统中使用的波浪号 (~)。因此,建议在定义工作区时使用绝对路径。

还建议安装 GTK 版本 2 来在 Linux 中使用完整的工作室主题。

Features of Anypoint Studio

以下是 Anypoint studio 增强 Mule 应用程序构建过程中的生产力的某些功能

  1. 它提供在本地运行时即时运行 Mule 应用程序。

  2. Anypoint studio 为我们提供可视化编辑器用于配置 API 定义文件和 Mule 域。

  3. 它嵌入了单元测试框架,以增强生产力。

  4. Anypoint studio 为我们提供内置支持以部署到 CloudHub。

  5. 它具有集成到 Exchange 的能力,用于从其他 Anypoint Platform 组织内导入模板、示例、定义和其他资源。

MuleSoft - Discovering Anypoint Studio

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

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

The Message Flow tab

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

the message flow tab

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

The Global Elements tab

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

global elements tab

The Configuration XML tab

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

configuration xml tab

Views

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

Package Explorer

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

package explorer

Mule Palette

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

  1. 此视图帮助我们管理项目中的模块和连接器。

  2. 我们还可以从 Exchange 中添加新元素。

看看它的截图 −

mule palette

Mule Properties

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

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

  2. 如果有或有变量,则可提供入站和出站属性。

以下是屏幕截图:

mule properties

Console

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

console

Problems View

我们在处理 Mule 项目时可能会遇到许多问题。所有这些问题都显示在“问题”视图中。以下是屏幕截图

problems view

Perspectives

在 Anypoint Studio 中,它是一个按指定方式排列的视图和编辑器的集合。Anypoint Studio 中有两种透视图:

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

Mule Debug Perspective - Anypoint Studio 提供的另一个透视图是 Mule 调试透视图。

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

MuleSoft - Creating First Mule Application

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

Launching Anypoint Studio

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

launching anypoint studio

User Interface of Anypoint Studio

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

user interface of anypoint studio

Steps for Creating Mule Application

要创建 Mule 应用程序,请按照以下步骤操作−

Creating New Project

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

steps for creating mule application

Naming the Project

按照上述说明,在单击“新建 Mule 项目”之后,将打开一个新窗口,询问项目名称和其他规范。输入项目名称“ TestAPP1 ”,然后单击完成按钮。

naming the project

单击完成按钮后,将打开为 MuleProject 建立的工作区,即 ‘TestAPP1’ 。您可以看到前一章中描述的所有 EditorsViews

testapp1

Configuring the Connector

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

configuring the connector

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

http listener configuration

单击确定后,将转到 HTTP Listener 属性页面。现在我们需要在常规选项卡下提供路径。在此特定示例中,我们已 /FirstAPP 提供为路径名称。

firstapp path name

Configuring Set Payload Connector

现在,我们需要使用 Set Payload 连接器。我们还需要在设置选项卡下提供其值,如下所示 −

payload connector

This is my first Mule Application ,是本示例中提供的名称。

Running Mule Application

现在,将其保存并单击 Run as Mule Application ,如下所示 −

run as mule application

我们可以在控制台中进行检查,以下是其部署应用程序的方式 −

first mule application

它显示您已成功构建您的第一个 Mule 应用程序。

Verifying Mule Application

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

verifying mule application

MuleSoft - DataWeave Language

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

Features of DataWeave Language

以下是 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
   }
}

接下来, output 负载如下:-

<?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 功能。

Prerequisites

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

  1. 使用 DataWeave 脚本需要 Anypoint Studio 7。

  2. 安装 Anypoint Studio 后,我们必须设置带有 Transform Message 组件的项目,以便使用 DataWeave 脚本。

Steps for Using DataWeave Script with Example

为了使用 DataWeave 脚本,我们需要按照以下步骤进行操作:

Step 1

首先,我们必须使用 File → New → Mule Project 设置一个新项目,就像我们上一章中所做的一样。

Step 2

接下来,我们需要提供项目名称。对于该示例,我们指定了名称 Mule_test_script

Step 3

现在,我们需要将 Transform Message componentMule Palette tab 拖动到 canvas 中。如下所示:

dataweave script

Step 4

接下来,在 Transform Message component 选项卡中,单击预览以打开预览窗格。我们可以通过单击 Preview 旁边的空白矩形来展开源代码区域。

Step 5

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

Example

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

transform message component

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

MuleSoft - Message Processor & Script Components

脚本模块让用户可以在 Mule 中使用脚本语言。简而言之,脚本模块可以交换用脚本语言编写的自定义逻辑。脚本可以用作实施或转换器。它们可用于表达式评估,即,用于控制消息路由。

Mule 支持以下脚本语言:

  1. Groovy

  2. Python

  3. JavaScript

  4. Ruby

How to Install Scripting Modules?

事实上,Anypoint Studio 随脚本模块一起提供。如果您在 Mule Palette 中找不到该模块,则可以使用 +Add Module 添加该模块。添加后,我们可以在 Mule 应用程序中使用脚本模块操作。

Implementing Example

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

install scripting modules

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

Step 1

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

Step 2

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

Step 3

General 选项卡下,我们需要在 Code text window 中提供代码,如下所示: −

code text window

Step 4

最后,我们需要从执行组件中选择 Engine 。以下是引擎列表: −

  1. Groovy

  2. Nashorn(javaScript)

  3. jython(Python)

  4. 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>

Message Sources

Mule 4 采用简化的 Mule 3 消息模型,使其在连接器中以一致的方式处理数据变得更加容易,而不会覆盖信息。在 Mule 4 消息模型中,每个 Mule 事件包含两部分内容: a message and variables associated with it

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

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

Inbound

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

  1. 在属性的帮助下,我们可以轻松查看哪些数据可用,因为属性是强类型的。

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

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

inbound

Outbound

为了发送附加数据,必须由 Mule 连接器和传输中明确指定 Mule 3 中的出站属性。但在 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>

Message Processor

一旦 Mule 从消息源接收消息,消息处理器的任务就开始了。Mule 使用一个或多个消息处理器通过流处理消息。消息处理器的主要任务是在消息通过 Mule 流时对其进行转换、筛选、丰富和处理。

Categorization of Mule Processor

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

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

  2. Components − 这些消息处理器本质上很灵活,以 Java、JavaScript、Groovy、Python 或 Ruby 等各种语言实现的业务逻辑。

  3. Filters − 它们筛选消息,仅允许根据特定条件在流中继续处理特定消息。

  4. Routers − 此消息处理器用于控制消息的流向路由、重新排序或拆分。

  5. Scopes − 它们基本上封装代码片段,目的是在流中定义细粒度的行为。

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

  7. Business Events - 它们基本上捕获与关键绩效指标相关的数据。

  8. Exception strategies - 这些消息处理程序处理消息处理期间发生的任何类型的错误。

MuleSoft - Core Components & Configuration

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

Mule 提供的配置模式类型如下:

  1. Simple service pattern

  2. Bridge

  3. Validator

  4. HTTP proxy

  5. WS proxy

Configuring the component

在 Anypoint 工作室中,我们可以按照以下步骤配置组件:

Step 1

我们需要将希望在 Mule 应用程序中使用的组件拖动过来。例如,在此处,我们将 HTTP 侦听器组件用作如下所示:

configuring the component

Step 2

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

configuration window

Step 3

我们可以根据项目的需要配置组件。例如,我们针对 HTTP 侦听器组件所执行的操作:

http listener component

核心组件是 Mule 应用程序中工作流程的一个重要组成部分。处理 Mule 事件的逻辑由这些核心组件提供。在 Anypoint 工作室中,要访问这些核心组件,可以从 Mule 调色板中单击“核心”,如下所示:

app mule palette

以下是各种 core components and their working in Mule 4

Custom Business Events

此核心组件用于收集有关 Mule 应用程序中处理业务交易的流以及消息处理程序的信息。换句话说,我们可以使用 Custom Business Event 组件在我们的工作流中添加以下内容:

  1. Metadata

  2. Key performance Indicators (KPIs)

How to add KPIs?

以下是为 Mule 应用程序中的流程添加关键绩效指标的步骤:

Step 1 - 按照 Mule Palette → Core → Components → Custom Business Event 添加 Custom Business Event 组件到 Mule 应用程序中的工作流中。

Step 2 - 单击组件以将其打开。

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

Step 4 - 要从消息有效负载中捕获信息,请添加关键绩效指标,如下所示:

  1. 为 KPI(跟踪:元数据元素)提供名称(键),并提供值。名称将用于运行时管理器的搜索界面。

  2. 提供可能为任何 Mule 表达式的值。

Example

以下表格由名称和价值的 KPI 列表组成 −

Name

Expression/Value

Student RollNo

#[payload[‘RollNo’]]

Student Name

#[payload[‘Name’]]

Dynamic Evaluate

此核心组件用于在 Mule 应用程序中动态选择脚本。我们还可以通过转换消息组件使用硬核脚本,但使用 Dynamic Evaluate 组件是一个更好的方法。此核心组件的工作方式如下 −

  1. 首先,它会评估应该产生另一个脚本的表达式。

  2. 然后,它评估该脚本以得出最终结果。

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

Example

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

流程的 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>

脚本可以使用消息、负载、变量或属性之类的上下文变量。但是,如果你想要添加自定义上下文变量,你需要提供一组键值对。

Configuring Dynamic Evaluate

以下表格提供了配置 Dynamic Evaluate 组件的方法 −

Field

Value

Description

Example

Expression

DataWeave expression

它指定要被评估为最终脚本的表达式。

expression="#[vars.generateOrderScript]"

Parameters

DataWeave expression

It specifies key-value pairs.

#[{joiner: ' and ', id: payload.user.id}]

Flow Reference Component

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

Characteristics

以下是此核心组件的特征 −

  1. 此核心组件允许我们像当前流中的单个组件一样对待整个引用流。

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

  3. 通过这种方式,我们可以附加指向处理流的流引用,而不是附加整个处理步骤。下图显示流引用核心组件指向名为 ProcessFiles 的子流。

flow reference component

Working

通过以下图表可以了解流引用组件的工作原理 −

main working flow

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

在到达流引用后,Mule 事件从头到尾执行引用流。一旦 Mule 事件完成执行引用流,它将返回到主流。

Example

为了更好地理解, let us use this component in Anypoint Studio 。在此示例中,我们将 HTTP 侦听器用于 GET 消息,正如我们在上一章节中所做的一样。因此,我们可以拖放组件并进行配置。但对于此示例,我们需要添加子流组件并在其下方设置有效负载组件,如下所示 −

component in anypoint studio

接下来,我们需要通过双击配置 Set Payload 。此处我们给出的值“子流已执行”,如下所示 −

set payload

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

sub flow component

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

choose flow name

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

postman

Logger Component

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

Advantages

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

  1. 我们可以将此核心组件添加到工作流中的任何位置。

  2. 我们可以对其进行配置以记录我们指定的字符串。

  3. 我们可以将其配置为我们编写的 DataWeave 表达式的输出。

  4. 我们还可将其配置为字符串和表达式的任意组合。

Example

以下示例在浏览器中 Set Payload 中显示消息“Hello World”,并同时记录消息。

logger component

以下是上述示例中的流的 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>

Transfer Message Component

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

Methods to build Transformation

我们可以借助以下两个方法构建转换 −

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

transfer message component

Script View − 转换的可视化映射也可在 DataWeave(用于 Mule 代码的语言)的帮助下表示。我们可以对高级转换(例如聚合、规范化、分组、连接、分区、旋转和筛选)进行编码。示例如下 −

transformation source

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

  1. CSV

  2. Schema

  3. Flat file Schema

  4. JSON

  5. Object class

  6. Simple Type

  7. XML Schema

  8. Excel 列名和类型

  9. 固定宽度列名称和类型

MuleSoft - Endpoints

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

Scheduler Endpoint

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

Important points about Scheduler

在使用调度程序事件时,我们需要考虑以下一些重要事项:

  1. 调度程序端点遵循 Mule 运行时正在运行的机器的时区。

  2. 假设 Mule 应用程序在 CloudHub 中运行,则调度程序将遵循 CloudHub 工作程序正在运行的区域的时区。

  3. 在任何给定时间,只可以激活一个由调度程序端点触发的流。

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

Ways to configure a Scheduler

如上所述,我们可以配置调度程序端点以在固定时间间隔触发,或者我们还可以提供 Cron 表达式。

Parameters to configure a Scheduler (For Fixed Interval)

以下是要在常规时间间隔触发流的调度程序的参数:

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

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

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

Parameters to configure a Scheduler (For Cron Expression)

实际上,Cron 是用于描述时间和日期信息的标准。如果您使用灵活的 Cron 表达式来使调度触发器触发,则调度程序端点将跟踪每秒,并在 Quartz Cron 表达式与时间日期设置相匹配时创建一个 Mule 事件。使用 Cron 表达式,可以一次触发事件或在常规时间间隔触发。

下表给出了六个必填设置的日期时间表达式:

Attribute

Value

Seconds

0-59

Minutes

0-59

Hours

0-23

Day of month

1-31

Month

1-12 or JAN-DEC

Day of the week

1-7 or SUN-SAT

以下是一些由调度程序端点支持的 Quartz Cron 表达式的示例:

  1. ½ * * * * ? - 表示调度程序每天每 2 秒运行一次。

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

  3. 1 1 1 1, 5 * ? - 表示调度程序每年 1 月 1 日和 4 月 1 日运行。

Example

以下代码每秒钟记录一次消息“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 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.

MuleSoft - Web Services Using Anypoint Studio

REST Web Service

REST 的全称是表述性状态转移,它与 HTTP 绑定。因此,如果您想设计一个专门在网络上使用的应用程序,REST 是最佳选择。

Consuming RESTful Web Services

在以下示例中,我们将使用 REST 组件和 Mule Soft 提供的名为 American Flights details 的一个公共 RESTful 服务。它有各种详细信息,但我们将使用 GET: http://training-american-ws.cloudhub.io/api/flights 来返回所有航班详细信息。如前所述,REST 与 HTTP 绑定,因此我们也需要两个 HTTP 组件——一个侦听器和一个请求,用于此应用程序。以下屏幕截图显示了 HTTP 侦听器的配置 -

rest web service

Configuring and passing arguments

HTTP 请求的配置如下 -

http request

现在,根据我们的工作空间流程,我们采用了记录器,因此可以按如下方式对其进行配置 -

convert the payload

在消息选项卡中,我们编写代码将有效负载转换为字符串。

Testing the Application

现在,保存并运行该应用程序,然后转到 POSTMAN 中以检查最终输出,如下所示 -

testing the application

您可以看到它通过使用 REST 组件给出了航班详细信息。

SOAP Component

SOAP 的全称为 Simple Object Access Protocol 。它基本上是用于在 Web 服务实施中交换信息的通信协议规范。接下来,我们将在 Anypoint Studio 中使用 SOAP API 来使用 Web 服务访问信息。

Consuming SOAP-based Web Services

对于此示例,我们将使用名为国家/地区信息服务的公共 SOAP 服务,该服务保留与国家/地区信息相关的服务。其 WSDL 地址为: http://www.oorsprong.org/websamples.countryinfo/countryinfoservice.wso?WSDL

首先,我们需要从 Mule Palette 的画布中拖动 SOAP 消费,如下所示:

consuming soap

Configuring and Passing Arguments

接下来,我们需要配置 HTTP 请求,如下面所示,如上一个示例中所做:

passing arguments

现在,我们还需要配置 Web 服务使用者,如下所示:

web service consumer

在 WSDL 位置的地方,我们需要提供 WSDL 的 Web 地址,如上所述(此示例)。提供 Web 地址后,Studio 会自行搜索服务、端口和地址。您无需手动提供它。

Transfer Response from Web Service

为此,我们需要在 Mule 流程中添加一个记录器,并将其配置为提供有效负载,如下所示:

transfer response
response from web service

Testing the Application

保存并运行应用程序,然后转到 Google Chrome 检查最终输出。键入 http://localhist:8081/helloSOAP (此示例),它将显示如下面的屏幕截图所示的国家/地区名称(按代码):

final output

MuleSoft - Mule Error Handling

新的 Mule 错误处理是 Mule 4 中进行的最大、最重要的更改之一。新的错误处理可能看起来很复杂,但它更好、更高效。在本章中,我们将讨论 Mule 错误的组成部分、错误类型、Mule 错误类别和用于处理 Mule 错误的组件。

Components of Mule Error

Mule 错误是 Mule 异常失败造成的结果,包括以下组件:

Description

它是 Mule 错误的一个重要组成部分,将提供有关问题的信息。其表达式如下:

#[error.description]

Type

Mule 错误类型组件用于描述问题。它还允许在错误处理程序内进行路由。其表达式如下:

#[error.errorType]

Cause

Mule 错误的 Cause 组件提供了导致错误的底层 Java 可抛出项。其表达式如下:

#[error.cause]

Message

Mule 错误中的消息组件显示有关错误的可选消息。其表达式如下:

#[error.errorMessage]

Child Errors

Mule 错误的子错误组件提供了内部错误的可选集合。这些内部错误主要由 Scatter-Gather 等元素用于提供聚合路由错误。其表达式如下:

#[error.childErrors]

Example

如果 HTTP 请求的状态代码为 401 失败,则 Mule 错误如下:

Description: HTTP GET on resource ‘http://localhost:8181/TestApp’
failed: unauthorized (401)
Type: HTTP:UNAUTHORIZED
Cause: a ResponseValidatorTypedException instance
Error Message: { "message" : "Could not authorize the user." }

Sr.NO

Error Type and Description

1

TRANSFORMATION 此错误类型表示在转换值时发生错误。转换是 Mule Runtime 内部转换,而不是 DataWeave 转换。

2

EXPRESSION 此类错误类型表示在求值表达式时发生错误。

3

VALIDATION 此类错误类型表示发生验证错误。

4

DUPLICATE_MESSAGE 消息处理两次时会发生的一种验证错误。

5

REDELIVERY_EXHAUSTED 当对来自某一消息源的消息重新处理的最大尝试已用尽时,会发生这种类型的错误。

6

CONNECTIVITY 这种错误类型表示建立连接时遇到的问题。

7

ROUTING 这种错误类型表示在路由消息时遇到的错误。

8

SECURITY 这种错误类型表示遇到的安全错误。例如,接收到无效的凭证。

9

STREAM_MAXIMUM_SIZE_EXCEEDED 当流允许的最大大小耗尽时,会发生这种错误类型。

10

TIMEOUT 它表示处理消息时的超时。

11

UNKNOWN 这种错误类型表示遇到的意外错误。

12

SOURCE 它表示在流源中遇到的错误。

13

SOURCE_RESPONSE 它表示在处理成功响应时在流源中遇到的错误。

在上面的示例中,您可以看到 Mule 错误的消息组件。

Error Types

让我们借助 Mule 错误类型的特性来理解错误类型 -

  1. Mule 错误类型的第一个特性是它由 a namespace and an identifier 组成。这使我们能够根据错误类型的域来区分它们。在上面的示例中,错误类型是 HTTP: UNAUTHORIZED

  2. 第二个重要特性是错误类型可能有一个父类型。例如,错误类型 HTTP: UNAUTHORIZED 具有 MULE:CLIENT_SECURITY 作为父类型,后者又具有名为 MULE:SECURITY 的父类型。这个特性将错误类型建立为更全局项目的规格。

Kinds of Error Types

所有错误分类如下 -

ANY

此类别下的错误是在流程中可能发生的错误。这些错误不太严重,可以轻松处理。

CRITICAL

此类别下的错误是无法处理的严重错误。以下是此类别下的错误类型列表 -

Sr.NO

Error Type and Description

1

OVERLOAD 这种错误类型表示由于超载问题导致的错误。在这种情况下,执行将被拒绝。

2

FATAL_JVM_ERROR 这种错误类型表示发生了致命错误。例如,堆栈溢出。

CUSTOM Error Type

自定义错误类型是由我们定义的错误。它们可以在映射或引发错误时定义。我们必须为这些错误类型提供一个特定的自定义命名空间,以便将它们与 Mule 应用程序中的其他现有错误类型区分开来。例如,在使用 HTTP 的 Mule 应用程序中,我们不能使用 HTTP 作为自定义错误类型。

Categories of Mule Error

广义上讲,Mule 中的错误可以分为两类,即 Messaging Errors and System Errors

Messaging Error

这一类 Mule 错误与 Mule 流相关。每当 Mule 流中出现问题时,Mule 都会引发消息传递错误。我们可以在错误处理组件内设置 On Error 组件,以处理这些 Mule 错误。

System Error

系统错误表示系统级发生的异常。如果没有 Mule 事件,系统错误将由系统错误处理程序处理。系统错误处理程序处理的异常类型如下所示:

  1. - 在应用程序启动期间发生的异常。

  2. - 连接到外部系统时发生的异常。

如果发生系统错误,Mule 会将错误通知发送给已注册的监听器。它还会记录错误。另一方面,如果错误是由连接失败引起的,Mule 将执行重新连接策略。

Handling Mule Errors

Mule 具有以下两个错误处理程序来处理错误:

On-Error Error Handlers

第一个 Mule 错误处理程序是 On-Error 组件,该组件定义了它们可以处理的错误类型。如前所述,我们可以在 ERROR HANDLER 组件(类似范围)内配置 On-Error 组件。每个 Mule 流只包含一个错误处理程序,但该错误处理程序可以包含我们需要的任意多个 On-Error 范围。在流内借助 On-Error 组件处理 Mule 错误的步骤如下:

  1. - 首先,每当 Mule 流引发错误时,正常流执行都会停止。

  2. - 接下来,进程将传输到 Error Handler Component 中, Error Handler Component 已具有 On Error component 来匹配错误类型和表达式。

  3. - 最后,错误处理程序将错误路由到第一个匹配错误的 On Error scope

handling messaging

以下是 Mule 支持的两种类型的 On-Error 组件:

On-Error Propagate

On-Error Propagate 组件执行,但会将错误传播到下一级并中断所有者的执行。如果它由 On Error Propagate 组件处理,事务将回滚。

On-Error Continue

与 On-Error Propagate 组件类似,On-Error Continue 组件也会执行事务。唯一条件是,如果所有者已成功完成执行,则该组件将使用执行结果作为其所有者的结果。如果它由 On-Error Continue 组件处理,事务将提交。

Try Scope Component

Try Scope 是 Mule 4 中众多新功能之一。它的工作方式类似于 JAVA 中的 try 块,在其中我们通常将有异常可能性的代码封装起来,以便可以处理它而不会中断整个代码。

我们可以在 Try Scope 中包装一个或多个 Mule 事件处理器,此后,try scope 将捕获并处理这些事件处理器引发的任何异常。try scope 的主要工作围绕其自己的错误处理策略进行,该策略支持对其内部组件进行错误处理,而不是整个流。因此,我们不需要将流提取到一个单独的流中。

Example

以下是 try scope 用法的一个示例:

try scope

Configuring try scope for handling transactions

众所周知,事务是一系列绝不应该部分执行的操作。在事务范围内执行的所有操作都在同一线程中执行,如果发生错误,它将导致回滚或提交。我们可以按以下方式配置 try scope,以便它将子操作视为一个事务。

configuring try scope
  1. INDIFFERENT [Default] − 如果我们在 try 块中选择此配置,那么子操作将不会被视为一个事务。在这种情况下,错误既不会回滚也不会提交。

  2. ALWAYS_BEGIN − 它表示每次执行范围时都会启动一个新的事务。

  3. BEGIN_OR_JOIN − 它表示,如果流的当前处理已启动一个事务,则加入该事务。否则,启动一个新的事务。

MuleSoft - Mule Exception handling

对于每个项目,一个事实是肯定会发生例外。这就是捕获、分类和处理异常非常重要的原因,从而系统/应用程序不会处于不一致的状态。有一个默认异常策略,它隐式应用于所有 Mule 应用程序。自动回滚任何待处理事务是默认异常策略。

Exceptions in Mule

在深入研究异常处理之前,我们应该了解会发生哪种异常以及开发人员在设计异常处理程序时必须具备的三个基本问题。

Which Transport is important?

在设计异常处理程序之前,此问题非常相关,因为并非所有传输都支持跨国性。

FileHTTP 不支持事务。因此,如果在这些情况下发生异常,我们必须手动对其进行管理。

Databases 支持事务。在这种情况下设计异常处理程序时,我们必须记住数据库事务可以自动回滚(如果需要的话)。

对于 REST APIs ,我们应该记住它们应该返回正确的 HTTP 状态码。例如,资源未找到时为 404。

Which Message Exchange Pattern to be used?

在设计异常处理程序时,我们必须注意消息交换模式。可以有同步(请求-响应)或异步(防火)消息模式。

Synchronous message pattern 基于请求-响应格式,这意味着此模式将期待响应,并且在返回响应或超时之前将被阻塞。

Asynchronous message pattern 基于防火格式,这意味着此模式假定最终将处理请求。

Which type of exception is it?

非常简单的规则是,你将根据异常的类型来处理该异常。了解这个异常是由系统/技术问题还是业务问题引起的非常重要?

system/technical issue 发生的异常(例如网络中断)应该由重试机制自动处理。

另一方面, by a business issue 发生的异常(例如无效数据)不应该通过应用重试机制来解决,因为在未修复根本原因的情况下,重试是没有用的。

Why to Categorize Exceptions?

众所周知,并非所有异常都是相同的,因此对异常进行分类非常重要。从高层面上讲,可以将异常分类为以下两种类型 −

Business Exceptions

业务异常发生的主要原因是错误的数据或不正确的流程流。此类异常通常本质上不可重试,因此配置 rollback 不好。即使应用 retry 机制也没有任何意义,因为在不修复根本原因的情况下,重试是没有用的。为了处理此类异常,应立即停止处理,并将异常作为对死信队列响应发送回。还应该向运维发送通知。

Non-business Exceptions

非业务异常发生的主要原因是系统问题或技术问题。这类异常本质上是可重试的,因此为了解决这些异常,最好配置 retry 机制。

Exception Handling Strategies

Mule 有以下五种异常处理策略 −

Default Exception Strategy

Mule 隐式地将此策略应用于 Mule 流程。它可以处理我们流程中的所有异常,但是也可以通过添加 catch、选择或回滚异常策略来覆盖它。此异常策略将回滚任何待定的事务并记录异常。此异常策略的一个重要特征是,如果没有事务,它还将记录异常。

作为默认策略,Mule 在流中出现任何错误时实现此策略。我们无法在 AnyPoint Studio 中进行配置。

Rollback Exception Strategy

假设如果没有可能纠正错误的解决方案,该怎么办?一种解决方案是使用回滚异常策略,该策略将回滚事务,同时向父流程的入站连接器发送消息以重新处理消息。当我们想要重新处理消息时,此策略也非常有用。

Example

此策略可以应用于资金存入支票/储蓄账户的银行交易中。我们可以在此处配置回滚异常策略,因为如果在交易过程中发生错误,此策略会将消息回滚到流的开头,以重新尝试处理。

Catch Exception Strategy

此策略捕获其父流程中引发的所有异常。它通过处理父流程引发的所有异常来覆盖 Mule 的默认异常策略。我们可以使用 catch 异常策略来避免将异常传播到入站连接器和父流程。

此策略还确保在发生异常时不会回滚流处理的事务。

Example

此策略可以应用于航班预订系统,其中我们有一个用于处理来自队列的消息的流程。消息丰富器在消息中添加了一个属性以分配座位,然后将消息发送到另一个队列。

现在,如果此流程中发生任何错误,则消息将引发异常。在这里,我们的 catch 异常策略可以添加一个带有适当消息的标头,并可以将该消息从流程推送到下一个队列。

Choice Exception Strategy

如果您想根据消息内容来处理异常,那么选择异常策略将是最佳选择。此异常策略的工作方式如下 −

  1. 首先,它捕获父流程中引发的所有异常。

  2. 接下来,它检查消息内容和异常类型。

  3. 最后,它将消息路由到适当的异常策略。

在选择异常策略中,会有多个异常策略,例如 Catch 或 Rollback。如果没有在此异常策略中定义任何策略,它会将消息路由到默认异常策略。它不会执行任何提交或回滚或消费活动。

Reference Exception Strategy

这涉及一个在独立配置文件中定义的常见异常策略。如果消息引发异常,此异常策略会引用在全局 catch、rollback 或 choice 异常策略中定义的错误处理参数。与 choice 异常策略一样,它也不会执行任何 commit 或 rollback 或消费活动。

MuleSoft - Testing with MUnit

我们了解,单元测试是一种通过该测试源代码的各个单元以确定它们是否适合使用的方法。Java 程序员可以使用 Junit 框架来编写测试用例。同样,MuleSoft 也拥有一个名为 MUnit 的框架,它允许我们为我们的 API 和集成编写自动化测试用例。它非常适合持续集成/部署环境。MUnit 框架的最大优势之一是我们可以将其与 Maven 和 Surefire 集成。

Features of MUnit

以下是 Mule MUnit 测试框架的一些非常有用的功能

  1. 在 MUnit 框架中,我们可以使用 Mule 代码和 Java 代码创建我们的 Mule 测试。

  2. 我们可以在 Anypoint Studio 中以图形方式或 XML 方式设计和测试我们的 Mule 应用程序和 API。

  3. MUnit 允许我们轻松地将测试集成到现有的 CI/CD 流程中。

  4. 它提供自动生成的测试和覆盖率报告;因此手动工作量最小。

  5. 我们还可以使用本地 DB/FTP/邮件服务器来通过 CI 流程使测试更便携。

  6. 它允许我们启用或禁用测试。

  7. 我们还可以使用插件扩展 MUnit 框架。

  8. 它允许我们验证消息处理器调用。

  9. 借助 MUnit 测试框架,我们可以禁用端点连接器以及流入端点。

  10. 我们可以使用 Mule 堆栈跟踪检查错误报告。

Latest Release of Mule MUnit Testing Framework

MUnit 2.1.4 是 Mule MUnit 测试框架的最新版本。它需要以下硬件和软件要求

  1. MS Windows 8+

  2. Apple Mac OS X 10.10

  3. Linux

  4. Java 8

  5. Maven 3.3.3、3.3.9、3.5.4、3.6.0

它与 Mule 4.1.4 和 Anypoint Studio 7.3.0 兼容。

MUnit and Anypoint Studio

如上文所讨论的,MUnit 已完全集成在 Anypoint Studio 中,我们可以以图形方式或在 Anypoint Studio 内以 XML 形式设计和测试 Mule 应用程序和 API。换句话说,我们可以使用 Anypoint Studio 的图形界面执行以下操作 -

  1. 创建和设计 MUnit 测试

  2. For running our tests

  3. 查看测试结果以及覆盖率报告

  4. For debugging the tests

因此,让我们开始逐一讨论每项任务。

Creating and Designing MUnit Tests

一旦你启动新项目,它就会自动向我们的项目中添加一个新文件夹,即 src/test/munit 。例如,我们启动了一个名为 test_munit 的新 Mule 项目,你可以在下图中看到,它在我们的项目下添加了上述文件夹。

designing munit tests

现在,一旦启动新项目,就有两种基本方法可以在 Anypoint Studio 中创建新的 MUnit 测试 -

  1. By Right-Clicking the Flow - 在此方法中,我们需要右键单击特定流,然后从下拉菜单中选择 MUnit。

  2. By Using the Wizard - 在此方法中,我们需要使用向导创建测试。它允许我们为工作空间中的任何流创建测试。

我们将使用“右键单击流”的方式为特定流创建测试。

首先,我们需要按如下方式在工作空间中创建一个流 -

test munitflow

现在,右键单击此流并选择 MUnit 为此流创建测试,如下所示 -

select munit

它将创建一个以流所在的 XML 文件命名的新测试套件。在这种情况下, test_munit-test-suite 是新测试套件的名称,如下所示 -

flow execution

以下是用于上述消息流的 XML 编辑器 -

xml editor

现在,我们可以通过从 Mule Palette 中拖动 MUnit 消息处理器将其添加到测试套件中。

validation assert

如果你想通过向导创建测试,请按照 File → New → MUnit 操作,它将引导你进入以下 MUnit 测试套件 -

munit test suite

Configuring the test

在 Mule 4 中,我们有两个新部分,分别是 MUnitMUnit Tools ,它们共同拥有所有 MUnit 消息处理器。你可以在你的 MUnit 测试区域中拖动任何消息处理器。在下图中所示 -

configuring the test

现在,如果你想在 Anypoint Studio 中编辑你的套装或测试的配置,则需要按照以下步骤操作 −

Step 1

转到 Package Explorer 并右键单击你的套装或测试的 .xml file 。然后,选择 Properties

Step 2

现在,在属性窗口中,我们需要单击 Run/Debug Setting*s. After this click *New

Step 3

最后一步,单击 Select Configuration Type 窗口下的 MUnit ,然后单击 OK

edit launch configuration

Running the Test

我们可以运行测试套件以及测试。首先,我们将看到如何运行测试套件。

Running a Test Suite

对于运行测试套件,右键单击你的测试套件所在的 Mule Canvas 空白部分。它会打开一个下拉菜单。现在,单击 Run MUnit suite ,如下所示 −

running a test suite

稍后,我们可以在控制台中看到输出。

Running a Test

要运行特定测试,我们需要选择特定测试并右键单击它。我们将会得到与运行测试套件时相同的下拉菜单。现在,单击 Run MUnit Test 选项,如下所示 −

running a test

然后可以在控制台中看到输出。

Viewing and Analyzing Test Result

Anypoint studio 在左侧资源管理器窗格的 MUnit tab 中显示 MUnit 测试结果。你可以找到绿色成功的测试和红色失败的测试,如下所示 −

generate report

我们可以通过查看覆盖率报告来分析我们的测试结果。覆盖率报告的主要功能是提供有关 MUnit 测试集成功执行的 Mule 应用程序的多少的指标。MUnit 覆盖基本上基于执行的 MUnit 消息处理器的数量。MUnit 覆盖报告提供以下指标 −

  1. Application overall coverage

  2. Resource coverage

  3. Flow coverage

要获得覆盖率报告,我们需要单击 MUnit 选项卡下的“生成报告”,如下所示 −

analyzing test result

Debugging the test

我们可以调试一个测试套件以及一个测试。首先,我们将看到如何调试一个测试套件。

Debugging a Test Suite

要调试一个测试套件,右键单击存放你的测试套件的 Mule Canvas 空白部分。它会打开一个下拉菜单。现在,单击 Debug MUnit Suite ,如下面的图像所示 −

debugging the test

然后,我们可以在控制台中看到输出。

Debugging a Test

要调试一个特定测试,我们需要选择特定测试并右键单击它。我们将会得到与调试测试套件时相同的下拉菜单。现在,单击 Debug MUnit Test 选项。它显示在下面屏幕截图中。

debugging a test