Mulesoft 简明教程
MuleSoft - Introduction to Mule ESB
ESB 表示 Enterprise Service Bus ,它基本上是一个中间件工具,用于通过类似于总线的架构将各种应用程序集成在一起。从根本上说,它是一种设计,用于为集成应用程序之间的工作移动提供统一的手段。通过这种方式,在 ESB 架构的帮助下,我们可以通过通信总线连接不同的应用程序,并使它们能够在不相互依赖的情况下进行通信。
Implementing ESB
ESB 架构的主要重点是将系统彼此解耦,并允许它们以稳定且可控的方式进行通信。ESB 的实现可以通过以下方式借助 ‘Bus’ 和 ‘Adapter’ 来完成:
-
通过 JMS 或 AMQP 等消息传递服务器实现的“总线”概念用于将不同的应用程序相互解耦。
-
负责与后端应用程序进行通信并将数据从应用程序格式转换为总线格式的“适配器”概念用于应用程序和总线之间。
通过总线从一个应用程序传递到另一个应用程序的数据或消息采用规范格式,这意味着将有一个一致的消息格式。
适配器还可以执行其他活动,如安全、监视、错误处理和消息路由管理。
ESB’s Guiding Principles
我们可以将这些原则称为核心集成原则。它们如下:
-
Orchestration - 集成两个或多个服务以实现数据和过程之间的同步。
-
Transformation - 将数据从规范格式转换为特定于应用程序的格式。
-
Transportation - 处理 FTP、HTTP、JMS 等格式之间的协议协商。
-
Mediation − 提供多重接口以支持服务的多个版本。
-
Non-functional consistency − 提供用于管理事务和安全性的机制。
Need of ESB
ESB 架构使我们能够集成不同的应用程序,其中每个应用程序都可以通过它来通信。以下是在何时使用 ESB 的一些指南 −
-
Integrating two or more applications − 当需要集成两个或更多个服务或应用程序时,使用 ESB 架构是有益的。
-
Integration of more applications in future − 假设如果将来我们想要添加更多服务或应用程序,那么借助 ESB 架构可以轻松完成。
-
Using multiple protocols − 万一我们需要使用多个协议,如 HTTP、FTP、JMS 等,那么 ESB 是正确选择。
-
Message routing − 如果我们需要基于消息内容和其他类似参数进行消息路由,那么我们可以使用 ESB。
-
Composition and consumption − 如果我们需要发布服务供组合和消费,那么可以使用 ESB。
P2P integration vs. ESB integration
随着应用程序数量的增加,摆在开发人员面前的一个大问题是,如何连接不同的应用程序?这种情况可以通过手动编写各种应用程序之间的连接来处理。这称为 point-to-point integration 。
Rigidity 是点对点集成的最明显的缺点。连接和接口的数量越多,复杂性也会越大。P-2-P 集成的缺点导致了我们使用 ESB 集成。
ESB 是用于实现应用程序集成的更灵活的方式。它将每个应用程序功能封装并公开为一组离散的可重用功能。没有任何应用程序直接与其他应用程序集成,取而代之的是通过 ESB 来集成,如下所示 −
为了管理集成,ESB 具有以下两个组件 −
-
Service Registry − Mule ESB 具有服务注册表/存储库,其中公开到 ESB 中的所有服务都已发布并注册。它充当一个从其它应用程序中消费服务和功能的发现点。
-
Centralized Administration − 正如名称所示,它提供了在 ESB 内发生的交互性能的事务流程视图。
ESB Functionality − VETRO 缩写通常用于总结 ESB 的功能。具体如下 −
-
V (验证) − 正如名称所示,它会验证架构验证。它需要一个验证解析器和最新架构。XML 文档符合最新架构就是其中一个示例。
-
E (丰富) − 它向消息中添加了额外的数据。其目的是使消息对目标服务更有意义并且更有用。
-
T (转换) − 它将数据结构转换成规范化格式,或从规范化格式转换成其它格式。示例包括日期/时间、货币等的转换。
-
*R(*路由) − 它会路由消息,充当服务端点的守门员。
-
O (操作)−此功能的主要工作是调用目标服务或与目标应用程序交互。它们在后端运行。
VETRO 模式为集成提供了整体灵活性,并确保只有经过验证一致的数据才能在整个 ESB 中路由。
MuleSoft - The Mule Project
Mule项目的动机如下−
-
为程序员简化任务,
-
轻量级和模块化解决方案的需求,该解决方案可以从应用程序级消息传递框架扩展到企业级的高度可分发框架。
Mule ESB的设计基于事件驱动和以编程为基础的框架。它基于事件驱动,因为它结合了消息的统一表示方式,并且可以通过可插入模块进行扩展。它以编程为基础,因为程序员可以轻松地植入一些附加行为,例如特定消息处理或自定义数据转换。
History
Mule项目的背景如下−
SourceForge project
Mule项目始于2003年4月的SourceForge项目,两年后其第一版发布并转移到CodeHaus。通用消息对象(UMO)API是其架构的核心。UMO API背后的理念是统一逻辑,同时使它们与底层传输保持隔离。
Competitors of Mule ESB
以下是Mule ESB的主要竞争对手−
-
WSO2 ESB
-
Oracle Service Bus
-
WebSphere Message Broker
-
Aurea CX Platform
-
Fiorano ESB
-
WebSphere DataPower Gateway
-
Workday Business Process Framework
-
Talend Enterprise Service Bus
-
JBoss Enterprise Service Bus
-
iWay Service Manager
Mule’s Core Concept
如上所述,Mule ESB是一个基于Java的轻量级且高度可扩展的企业服务总线(ESB)和集成平台。无论应用程序使用何种技术,Mule ESB都能轻松集成应用程序,使其能够交换数据。在本节中,我们将讨论Mule的核心概念,以实现这种集成。
为此,我们需要了解其架构及构建块。
Architecture
Mule ESB的架构具有三层,即传输层、集成层和应用程序层,如下图所示−
通常,可以执行以下三类任务来配置和定制Mule部署−
Building Blocks
Mule配置具有以下构建块−
Global Message Processor
顾名思义,它观察或修改消息或消息流。转换器和过滤器是全局消息处理程序的示例。
Transformers - 转换器的主要工作是将数据从一种格式转换成另一种格式。可以在全局中定义,并可以在多个流程中使用。
Filters - 它是一个过滤器,将决定应该处理哪条 Mule 消息。过滤器基本上指定消息必须满足的条件,然后才能处理并路由到服务。
Mule Message Structure
Mule 消息完全包装在 Mule 消息对象中,是通过 Mule 流程传递到应用程序中的数据。Mule 消息的结构在以下图表中显示:
正如上述图表中所示,Mule 消息包含两个主要部分:
Header
它只不过是消息的元数据,由以下两个属性进一步表示:
Inbound Properties - 这些属性由消息源自动设置。它们不能由用户操作或设置。本质上,入站属性是不可变的。
Outbound Properties - 这些属性是包含元数据的属性,比如入站属性,可以在流程期间设置。它们可以由 Mule 自动设置,也可以由用户手动设置。本质上,出站属性是可变的。
当消息通过一个流程的出站端点通过传输转到另一个流程的入站端点时,出站属性将变为入站属性。
当消息通过 flow-ref 而不是连接器转到新流程时,出站属性仍保持出站属性。
MuleSoft - Mule in Our Machine
在前面章节中,我们了解了 Mule ESB 的基础知识。在本章节中,我们将了解如何安装和配置它。
Prerequisites
在计算机上安装 Mule 之前,我们需要满足以下先决条件−
System Requirements
在系统上安装 Mule 之前,它必须满足以下系统要求−
-
在虚拟化环境中至少 2 GHz CPU 或 1 个虚拟 CPU
-
Minimum 1 GB RAM
-
Minimum 4 GB storage
Download Mule
要下载 Mule 4 二进制文件,请点击链接 https://www.mulesoft.com/lp/dl/mule-esb-enterprise ,它会将您引导至 MuleSoft 的官方网页,如下所示−
通过提供必要的信息,您会以 Zip 格式获取 Mule 4 二进制文件。
Install and Run Mule
现在在下载完 Mule 4 二进制文件后,解压缩它并设置一个名为 MULE_HOME 的环境变量,用于提取的文件夹中的 Mule 目录。
例如,Windows 和 Linux/Unix 环境中的环境变量,可以在 Downloads 目录中设置为版本 4.1.5,如下所示−
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 操作系统下载该工作室。
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 并下载该工作室。
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 操作系统下载该工作室。
Step 2 − 现在,将其提取。
Step 3 − 接下来,打开提取的 Anypoint Studio。
Step 4 − 要接受默认工作区,请单击确定。首次加载时,您将收到欢迎消息。
Step 5 − 现在,单击入门按钮以使用 Anypoint Studio。
如果你打算对工作区使用自定义路径,请注意 Anypoint Studio 不会展开 Linux/Unix 系统中使用的波浪号 (~)。因此,建议在定义工作区时使用绝对路径。
还建议安装 GTK 版本 2 来在 Linux 中使用完整的工作室主题。
MuleSoft - Discovering Anypoint Studio
Anypoint Studio 编辑器帮助我们设计应用程序、API、属性和配置文件。除了设计之外,它还帮助我们编辑它们。为此,我们有 Mule 配置文件编辑器。要打开此编辑器,请双击 /src/main/mule 中的应用程序 XML 文件。
要使用我们的应用程序,我们在 Mule 配置文件编辑器下有以下三个选项卡。
The Message Flow tab
此选项卡提供了工作流的可视化表示。它基本上包含一个画布,帮助我们直观地检查我们的流。如果您想将 Mule Palette 中的事件处理器添加到画布中,只需拖放,它就会反映在画布中。
通过单击事件处理器,您可以获得 Mule 属性视图,其中包含所选处理器的属性。我们也可以编辑它们。
Views
对于活动编辑器,Anypoint studio 为我们提供了项目元数据的图形表示,以及视图中包含的属性。用户可以在 Mule 项目中移动、关闭和添加视图。以下是 Anypoint Studio 中的一些默认视图 −
Package Explorer
Package Explorer 视图的主要任务是显示 Mule 项目中包含的项目文件夹和文件。我们可以通过单击它旁边的箭头来展开或收缩 Mule 项目文件夹。可以通过双击打开文件夹或文件。看看它的截图 −
Mule Palette
Mule Palette 视图显示了事件处理器,如范围、过滤器和流控制路由器,以及模块及其相关操作。Mule Palette 视图的主要任务如下 −
-
此视图帮助我们管理项目中的模块和连接器。
-
我们还可以从 Exchange 中添加新元素。
看看它的截图 −
Mule Properties
顾名思义,它允许我们编辑画布中当前所选模块的属性。Mule 属性视图包括以下内容:
-
提供有关有效负载的数据结构的实时信息的 DataSense Explorer。
-
如果有或有变量,则可提供入站和出站属性。
以下是屏幕截图:
MuleSoft - Creating First Mule Application
在本章中,我们将在 MuleSoft 的 Anypoint Studio 中创建我们的第一个 Mule 应用程序。要创建它,首先我们需要启动 Anypoint Studio。
Steps for Creating Mule Application
要创建 Mule 应用程序,请按照以下步骤操作−
Naming the Project
按照上述说明,在单击“新建 Mule 项目”之后,将打开一个新窗口,询问项目名称和其他规范。输入项目名称“ TestAPP1 ”,然后单击完成按钮。
单击完成按钮后,将打开为 MuleProject 建立的工作区,即 ‘TestAPP1’ 。您可以看到前一章中描述的所有 Editors 和 Views 。
Configuring the Connector
在此,我们将为 HTTP Listener 构建一个简单的 Mule 应用程序。为此,我们需要从 Mule Palette 拖动 HTTP Listener 连接器并将其放到工作区,如下所示 −
现在,我们需要配置它。如上所示,在基本设置下,单击连接器配置之后的绿色 + 号。
单击确定后,将转到 HTTP Listener 属性页面。现在我们需要在常规选项卡下提供路径。在此特定示例中,我们已 /FirstAPP 提供为路径名称。
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 脚本之前,我们需要满足以下前提条件:-
-
使用 DataWeave 脚本需要 Anypoint Studio 7。
-
安装 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 component 从 Mule Palette tab 拖动到 canvas 中。如下所示:
Step 4
接下来,在 Transform Message component 选项卡中,单击预览以打开预览窗格。我们可以通过单击 Preview 旁边的空白矩形来展开源代码区域。
Step 5
现在,我们可以开始使用 DataWeave 语言进行脚本编写。
MuleSoft - Message Processor & Script Components
脚本模块让用户可以在 Mule 中使用脚本语言。简而言之,脚本模块可以交换用脚本语言编写的自定义逻辑。脚本可以用作实施或转换器。它们可用于表达式评估,即,用于控制消息路由。
Mule 支持以下脚本语言:
-
Groovy
-
Python
-
JavaScript
-
Ruby
How to Install Scripting Modules?
事实上,Anypoint Studio 随脚本模块一起提供。如果您在 Mule Palette 中找不到该模块,则可以使用 +Add Module 添加该模块。添加后,我们可以在 Mule 应用程序中使用脚本模块操作。
Implementing Example
正如所讨论的,我们需要将该模块拖放到画布中以创建工作区并在应用程序中使用它。以下是一个示例:
我们已经知道如何配置 HTTP Listener 组件;因此,我们将讨论配置脚本模块。我们需要按照以下编写步骤配置脚本模块:
Step 1
从 Mule Palette 中搜索脚本模块,然后将脚本模块的 EXECUTE 操作拖动到您的流程中,如上所示。
Step 2
现在,通过双击打开 Execute 配置选项卡。
Step 3
在 General 选项卡下,我们需要在 Code text window 中提供代码,如下所示: −
Step 4
最后,我们需要从执行组件中选择 Engine 。以下是引擎列表: −
-
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>
Message Sources
Mule 4 采用简化的 Mule 3 消息模型,使其在连接器中以一致的方式处理数据变得更加容易,而不会覆盖信息。在 Mule 4 消息模型中,每个 Mule 事件包含两部分内容: a message and variables associated with it 。
Mule 消息包含有效负载及其属性,其中属性主要是元数据,例如文件大小。
变量保存任意用户信息,例如操作结果、辅助值等。
Inbound
Mule 3 中的入站属性现在成为 Mule 4 中的属性。众所周知,入站属性存储通过消息源获得的有关有效负载的附加信息,但在 Mule 4 中,这是借助属性完成的。属性具有以下优点: −
-
在属性的帮助下,我们可以轻松查看哪些数据可用,因为属性是强类型的。
-
我们可以轻松访问属性中包含的信息。
以下是 Mule 4 中典型消息的示例: −
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 处理器类别: −
-
Connectors − 这些消息处理器发送和接收数据。它们还通过标准协议或第三方 API 将数据插入外部数据源。
-
Components − 这些消息处理器本质上很灵活,以 Java、JavaScript、Groovy、Python 或 Ruby 等各种语言实现的业务逻辑。
-
Filters − 它们筛选消息,仅允许根据特定条件在流中继续处理特定消息。
-
Routers − 此消息处理器用于控制消息的流向路由、重新排序或拆分。
-
Scopes − 它们基本上封装代码片段,目的是在流中定义细粒度的行为。
-
Transformers - 转换器的作用是转换消息有效负载类型和数据格式,以促进系统之间的通信。
-
Business Events - 它们基本上捕获与关键绩效指标相关的数据。
-
Exception strategies - 这些消息处理程序处理消息处理期间发生的任何类型的错误。
MuleSoft - Core Components & Configuration
Mule 最重要的能力之一是它可以使用组件执行路由、转换和处理,因此组合各种元素的 Mule 应用程序配置文件非常大。
Mule 提供的配置模式类型如下:
-
Simple service pattern
-
Bridge
-
Validator
-
HTTP proxy
-
WS proxy
Configuring the component
在 Anypoint 工作室中,我们可以按照以下步骤配置组件:
Step 1
我们需要将希望在 Mule 应用程序中使用的组件拖动过来。例如,在此处,我们将 HTTP 侦听器组件用作如下所示:
Step 2
接下来,双击该组件以获取配置窗口。对于 HTTP 侦听器,如下所示:
Step 3
我们可以根据项目的需要配置组件。例如,我们针对 HTTP 侦听器组件所执行的操作:
核心组件是 Mule 应用程序中工作流程的一个重要组成部分。处理 Mule 事件的逻辑由这些核心组件提供。在 Anypoint 工作室中,要访问这些核心组件,可以从 Mule 调色板中单击“核心”,如下所示:
以下是各种 core components and their working in Mule 4 :
Custom Business Events
此核心组件用于收集有关 Mule 应用程序中处理业务交易的流以及消息处理程序的信息。换句话说,我们可以使用 Custom Business Event 组件在我们的工作流中添加以下内容:
-
Metadata
-
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 - 要从消息有效负载中捕获信息,请添加关键绩效指标,如下所示:
-
为 KPI(跟踪:元数据元素)提供名称(键),并提供值。名称将用于运行时管理器的搜索界面。
-
提供可能为任何 Mule 表达式的值。
Dynamic Evaluate
此核心组件用于在 Mule 应用程序中动态选择脚本。我们还可以通过转换消息组件使用硬核脚本,但使用 Dynamic Evaluate 组件是一个更好的方法。此核心组件的工作方式如下 −
-
首先,它会评估应该产生另一个脚本的表达式。
-
然后,它评估该脚本以得出最终结果。
通过这种方式,它允许我们动态选择脚本,而不是对其进行硬编码。
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>
脚本可以使用消息、负载、变量或属性之类的上下文变量。但是,如果你想要添加自定义上下文变量,你需要提供一组键值对。
Flow Reference Component
如果你想要在同一 Mule 应用程序中将 Mule 事件路由到另一个流或子流,那么流引用组件是正确的选择。
Characteristics
以下是此核心组件的特征 −
-
此核心组件允许我们像当前流中的单个组件一样对待整个引用流。
-
它将 Mule 应用程序分解成离散的可重用单元。例如,一个流正在定期列出文件。它可能会引用另一个处理列表操作输出的流。
-
通过这种方式,我们可以附加指向处理流的流引用,而不是附加整个处理步骤。下图显示流引用核心组件指向名为 ProcessFiles 的子流。
Working
通过以下图表可以了解流引用组件的工作原理 −
该图表显示当一个流引用同一个应用程序中的另一个流时,Mule 应用程序中的处理顺序。当 Mule 应用程序中的主工作流被触发时,Mule 事件会一直传递并执行流,直到 Mule 事件到达流引用。
在到达流引用后,Mule 事件从头到尾执行引用流。一旦 Mule 事件完成执行引用流,它将返回到主流。
Example
为了更好地理解, let us use this component in Anypoint Studio 。在此示例中,我们将 HTTP 侦听器用于 GET 消息,正如我们在上一章节中所做的一样。因此,我们可以拖放组件并进行配置。但对于此示例,我们需要添加子流组件并在其下方设置有效负载组件,如下所示 −
接下来,我们需要通过双击配置 Set Payload 。此处我们给出的值“子流已执行”,如下所示 −
在成功配置子流组件后,我们需要将流引用组件设置在主流中设置有效负载之后,该组件可从 Mule Palette 中拖放,如下所示 −
接下来,在配置流引用组件时,我们需要在通用选项卡下选择流名称,如下所示 −
现在,保存并运行此应用程序。要对此进行测试,请转至 POSTMAN,在 URL 栏中键入 http:/localhost:8181/FirstAPP ,然后您将收到消息“子流已执行”。
Logger Component
名为记录器的核心组件通过记录重要信息来帮助我们监控和调试 Mule 应用程序,例如错误消息、状态通知、有效负载等。在 AnyPoint 工作室中,它们出现在 Console 中。
Advantages
以下是记录器组件的一些优点:
-
我们可以将此核心组件添加到工作流中的任何位置。
-
我们可以对其进行配置以记录我们指定的字符串。
-
我们可以将其配置为我们编写的 DataWeave 表达式的输出。
-
我们还可将其配置为字符串和表达式的任意组合。
Example
以下示例在浏览器中 Set Payload 中显示消息“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>
Transfer Message Component
转换消息组件(也称为传输组件)允许我们将输入数据转换为新的输出格式。
Methods to build Transformation
我们可以借助以下两个方法构建转换 −
Drag-and-Drop Editor (Graphical View) − 这是构建转换的第一种且是最常用的方法。在此方法中,我们可以使用此组件的可视化映射器来拖放传入数据结构的元素。例如,在以下示意图中,两个树视图显示了输入和输出的预期元数据结构。连接输入到输出字段的线表示两个树视图之间的映射。
Script View − 转换的可视化映射也可在 DataWeave(用于 Mule 代码的语言)的帮助下表示。我们可以对高级转换(例如聚合、规范化、分组、连接、分区、旋转和筛选)进行编码。示例如下 −
此核心组件主要接受变量、属性或消息有效负载的输入和输出元数据。我们可以为以下内容提供特定于格式的资源 −
-
CSV
-
Schema
-
Flat file Schema
-
JSON
-
Object class
-
Simple Type
-
XML Schema
-
Excel 列名和类型
-
固定宽度列名称和类型
MuleSoft - Endpoints
端点基本上包括那些在 Mule 应用程序的工作流中触发或启动处理的组件。它们在 Anypoint Studio 中称为 Source ,在 Mule 设计中心中称为 Triggers 。Mule 4 中的一个重要端点是 Scheduler component 。
Scheduler Endpoint
此组件基于时间条件工作,这意味着它使我们能够在基于时间条件满足时触发流。例如,调度程序可以触发事件以每隔 10 秒启动 Mule 工作流。我们还可以使用灵活的 Cron 表达式来触发调度程序端点。
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 表达式的示例:
-
½ * * * * ? - 表示调度程序每天每 2 秒运行一次。
-
0 0/5 16 * ?* - 表示调度程序从下午 4 点开始每 5 分钟运行一次,每天下午 4:55 结束。
-
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 表达式评估消息内容。
Scatter-Gather Router
另一种最常用的路由事件处理器是 Scatter-Gather component 。顾名思义,它基于分散(复制)和收集(合并)的基本原理工作。我们可以借助以下两点了解它的工作原理−
-
首先,此路由器将 Mule 事件复制(分散)到两个或多个并行路由。条件是每个路由都必须是一个或多个事件处理器的序列,就像一个子流程。在这种情况下,每个路由都将使用一个独立的线程创建一个 Mule 事件。每个 Mule 事件都有其自身的有效内容、属性以及变量。
-
接下来,此路由器从每个路由收集已创建的 Mule 事件,然后将它们合并到一个新的 Mule 事件中。此后,它将此合并的 Mule 事件传递到下一个事件处理器。这里的条件是 S-G 路由器仅在每个路由都成功完成时才将合并的 Mule 事件传递到下一个事件处理器。
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)。 |
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 侦听器的配置 -
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 消费,如下所示:
Testing the Application
保存并运行应用程序,然后转到 Google Chrome 检查最终输出。键入 http://localhist:8081/helloSOAP (此示例),它将显示如下面的屏幕截图所示的国家/地区名称(按代码):
MuleSoft - Mule Error Handling
新的 Mule 错误处理是 Mule 4 中进行的最大、最重要的更改之一。新的错误处理可能看起来很复杂,但它更好、更高效。在本章中,我们将讨论 Mule 错误的组成部分、错误类型、Mule 错误类别和用于处理 Mule 错误的组件。
Components of Mule Error
Mule 错误是 Mule 异常失败造成的结果,包括以下组件:
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 错误类型的特性来理解错误类型 -
-
Mule 错误类型的第一个特性是它由 a namespace and an identifier 组成。这使我们能够根据错误类型的域来区分它们。在上面的示例中,错误类型是 HTTP: UNAUTHORIZED 。
-
第二个重要特性是错误类型可能有一个父类型。例如,错误类型 HTTP: UNAUTHORIZED 具有 MULE:CLIENT_SECURITY 作为父类型,后者又具有名为 MULE:SECURITY 的父类型。这个特性将错误类型建立为更全局项目的规格。
Kinds of Error Types
所有错误分类如下 -
Categories of Mule Error
广义上讲,Mule 中的错误可以分为两类,即 Messaging Errors and System Errors 。
Handling Mule Errors
Mule 具有以下两个错误处理程序来处理错误:
On-Error Error Handlers
第一个 Mule 错误处理程序是 On-Error 组件,该组件定义了它们可以处理的错误类型。如前所述,我们可以在 ERROR HANDLER 组件(类似范围)内配置 On-Error 组件。每个 Mule 流只包含一个错误处理程序,但该错误处理程序可以包含我们需要的任意多个 On-Error 范围。在流内借助 On-Error 组件处理 Mule 错误的步骤如下:
-
- 首先,每当 Mule 流引发错误时,正常流执行都会停止。
-
- 接下来,进程将传输到 Error Handler Component 中, Error Handler Component 已具有 On Error component 来匹配错误类型和表达式。
-
- 最后,错误处理程序将错误路由到第一个匹配错误的 On Error scope 。
以下是 Mule 支持的两种类型的 On-Error 组件:
On-Error Continue
与 On-Error Propagate 组件类似,On-Error Continue 组件也会执行事务。唯一条件是,如果所有者已成功完成执行,则该组件将使用执行结果作为其所有者的结果。如果它由 On-Error Continue 组件处理,事务将提交。
Configuring try scope for handling transactions
众所周知,事务是一系列绝不应该部分执行的操作。在事务范围内执行的所有操作都在同一线程中执行,如果发生错误,它将导致回滚或提交。我们可以按以下方式配置 try scope,以便它将子操作视为一个事务。
-
INDIFFERENT [Default] − 如果我们在 try 块中选择此配置,那么子操作将不会被视为一个事务。在这种情况下,错误既不会回滚也不会提交。
-
ALWAYS_BEGIN − 它表示每次执行范围时都会启动一个新的事务。
-
BEGIN_OR_JOIN − 它表示,如果流的当前处理已启动一个事务,则加入该事务。否则,启动一个新的事务。
MuleSoft - Mule Exception handling
对于每个项目,一个事实是肯定会发生例外。这就是捕获、分类和处理异常非常重要的原因,从而系统/应用程序不会处于不一致的状态。有一个默认异常策略,它隐式应用于所有 Mule 应用程序。自动回滚任何待处理事务是默认异常策略。
Exceptions in Mule
在深入研究异常处理之前,我们应该了解会发生哪种异常以及开发人员在设计异常处理程序时必须具备的三个基本问题。
Which Transport is important?
在设计异常处理程序之前,此问题非常相关,因为并非所有传输都支持跨国性。
File 或 HTTP 不支持事务。因此,如果在这些情况下发生异常,我们必须手动对其进行管理。
Databases 支持事务。在这种情况下设计异常处理程序时,我们必须记住数据库事务可以自动回滚(如果需要的话)。
对于 REST APIs ,我们应该记住它们应该返回正确的 HTTP 状态码。例如,资源未找到时为 404。
Why to Categorize Exceptions?
众所周知,并非所有异常都是相同的,因此对异常进行分类非常重要。从高层面上讲,可以将异常分类为以下两种类型 −
Exception Handling Strategies
Mule 有以下五种异常处理策略 −
Default Exception Strategy
Mule 隐式地将此策略应用于 Mule 流程。它可以处理我们流程中的所有异常,但是也可以通过添加 catch、选择或回滚异常策略来覆盖它。此异常策略将回滚任何待定的事务并记录异常。此异常策略的一个重要特征是,如果没有事务,它还将记录异常。
作为默认策略,Mule 在流中出现任何错误时实现此策略。我们无法在 AnyPoint Studio 中进行配置。
Rollback Exception Strategy
假设如果没有可能纠正错误的解决方案,该怎么办?一种解决方案是使用回滚异常策略,该策略将回滚事务,同时向父流程的入站连接器发送消息以重新处理消息。当我们想要重新处理消息时,此策略也非常有用。
Example
此策略可以应用于资金存入支票/储蓄账户的银行交易中。我们可以在此处配置回滚异常策略,因为如果在交易过程中发生错误,此策略会将消息回滚到流的开头,以重新尝试处理。
Catch Exception Strategy
此策略捕获其父流程中引发的所有异常。它通过处理父流程引发的所有异常来覆盖 Mule 的默认异常策略。我们可以使用 catch 异常策略来避免将异常传播到入站连接器和父流程。
此策略还确保在发生异常时不会回滚流处理的事务。
Example
此策略可以应用于航班预订系统,其中我们有一个用于处理来自队列的消息的流程。消息丰富器在消息中添加了一个属性以分配座位,然后将消息发送到另一个队列。
现在,如果此流程中发生任何错误,则消息将引发异常。在这里,我们的 catch 异常策略可以添加一个带有适当消息的标头,并可以将该消息从流程推送到下一个队列。
MuleSoft - Testing with MUnit
我们了解,单元测试是一种通过该测试源代码的各个单元以确定它们是否适合使用的方法。Java 程序员可以使用 Junit 框架来编写测试用例。同样,MuleSoft 也拥有一个名为 MUnit 的框架,它允许我们为我们的 API 和集成编写自动化测试用例。它非常适合持续集成/部署环境。MUnit 框架的最大优势之一是我们可以将其与 Maven 和 Surefire 集成。
Features of MUnit
以下是 Mule MUnit 测试框架的一些非常有用的功能
-
在 MUnit 框架中,我们可以使用 Mule 代码和 Java 代码创建我们的 Mule 测试。
-
我们可以在 Anypoint Studio 中以图形方式或 XML 方式设计和测试我们的 Mule 应用程序和 API。
-
MUnit 允许我们轻松地将测试集成到现有的 CI/CD 流程中。
-
它提供自动生成的测试和覆盖率报告;因此手动工作量最小。
-
我们还可以使用本地 DB/FTP/邮件服务器来通过 CI 流程使测试更便携。
-
它允许我们启用或禁用测试。
-
我们还可以使用插件扩展 MUnit 框架。
-
它允许我们验证消息处理器调用。
-
借助 MUnit 测试框架,我们可以禁用端点连接器以及流入端点。
-
我们可以使用 Mule 堆栈跟踪检查错误报告。
Latest Release of Mule MUnit Testing Framework
MUnit 2.1.4 是 Mule MUnit 测试框架的最新版本。它需要以下硬件和软件要求
-
MS Windows 8+
-
Apple Mac OS X 10.10
-
Linux
-
Java 8
-
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 的图形界面执行以下操作 -
-
创建和设计 MUnit 测试
-
For running our tests
-
查看测试结果以及覆盖率报告
-
For debugging the tests
因此,让我们开始逐一讨论每项任务。
Creating and Designing MUnit Tests
一旦你启动新项目,它就会自动向我们的项目中添加一个新文件夹,即 src/test/munit 。例如,我们启动了一个名为 test_munit 的新 Mule 项目,你可以在下图中看到,它在我们的项目下添加了上述文件夹。
现在,一旦启动新项目,就有两种基本方法可以在 Anypoint Studio 中创建新的 MUnit 测试 -
-
By Right-Clicking the Flow - 在此方法中,我们需要右键单击特定流,然后从下拉菜单中选择 MUnit。
-
By Using the Wizard - 在此方法中,我们需要使用向导创建测试。它允许我们为工作空间中的任何流创建测试。
我们将使用“右键单击流”的方式为特定流创建测试。
首先,我们需要按如下方式在工作空间中创建一个流 -
现在,右键单击此流并选择 MUnit 为此流创建测试,如下所示 -
它将创建一个以流所在的 XML 文件命名的新测试套件。在这种情况下, test_munit-test-suite 是新测试套件的名称,如下所示 -
以下是用于上述消息流的 XML 编辑器 -
现在,我们可以通过从 Mule Palette 中拖动 MUnit 消息处理器将其添加到测试套件中。
如果你想通过向导创建测试,请按照 File → New → MUnit 操作,它将引导你进入以下 MUnit 测试套件 -
Configuring the test
在 Mule 4 中,我们有两个新部分,分别是 MUnit 和 MUnit Tools ,它们共同拥有所有 MUnit 消息处理器。你可以在你的 MUnit 测试区域中拖动任何消息处理器。在下图中所示 -
现在,如果你想在 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 。
Running the Test
我们可以运行测试套件以及测试。首先,我们将看到如何运行测试套件。
Viewing and Analyzing Test Result
Anypoint studio 在左侧资源管理器窗格的 MUnit tab 中显示 MUnit 测试结果。你可以找到绿色成功的测试和红色失败的测试,如下所示 −
我们可以通过查看覆盖率报告来分析我们的测试结果。覆盖率报告的主要功能是提供有关 MUnit 测试集成功执行的 Mule 应用程序的多少的指标。MUnit 覆盖基本上基于执行的 MUnit 消息处理器的数量。MUnit 覆盖报告提供以下指标 −
-
Application overall coverage
-
Resource coverage
-
Flow coverage
要获得覆盖率报告,我们需要单击 MUnit 选项卡下的“生成报告”,如下所示 −