1. Mulesoft其他功能介绍
1.1 Runtime manager
AnypointRuntime Manager 通过为部署在 Anypoint Platform 的所有资源提供单一虚拟管理平台,降低了管理和监控混合环境的复杂性。部署后,管理员可以监控部署的状态和情况,查看跨环境的性能指标,并连接到第三方监控和操作工具来驱动 SDLC(软件开发生命周期)。
1.2 Api manager
APIManager确保每个 API 的安全并加以管理。API Manager 可使您管理用户、监控和分析流量,并使用合同约定策略推广和保护 API。使用 Mule Runtime Engine 为后端服务和数据源的所有连接提供 API 管理,该引擎为单一运行时,可部署为集成引擎和 API 网关。无论您的 API 在何处托管或运行何种技术,API 管理器都可以在一个位置监控应用程序网络中的 API。
1.3 Api designer
AnypointDesign Center —— API Designer 提供了一个基于万维网的图形环境,用于设计、记录和测试 API。其中包括单点击模拟服务和嵌入式 Anypoint Exchange,以驱动发现和重复使用,API Designer 便于在设计过程的多个阶段与 API 调用者进行互动。
2. Anypoint Studio
AnypointStudio,是用于mule应用开发的图形设计环境,基于Eclipse。它以通过图形或XML形式构建、编辑、记录和调试集成,支持从构建到部署的整个过程,而且包含许多方便预设组件。其界面如下图:
Anypoint Studio界面
AnypointStudio的开发环境安装和简单教程详见:
https://docs.mulesoft.com/anypoint-studio/v/6/
3. Mule Runtime
3.1 Mule、MuleESB是什么?作用和特点?
Mule是一个以Java为核心的轻量级的消息框架和整合平台,ESB全称为Enterprise Service Bus,即企业服务总线,通过使用ESB,可以在几乎不更改代码的情况下,以一种无缝的非侵入方式使企业已有的系统具有全新的服务接口,并能够在部署环境中支持任何标准。更重要的是,充当“缓冲器”的ESB(负责在诸多服务之间转换业务逻辑和数据格式)与服务逻辑相分离,从而使得不同的应用程序可以同时使用同一服务,用不着在应用程序或者数据发生变化时,改动服务代码。
MuleESB是一个ESB消息框架,用于程序之间的数据交换。程序或应用被封装成为服务,服务包含服务组件、消息路由和其它一些配置。Transport使得服务间的数据在不同渠道内得以传送,并且transport在对数据的传输过程中,对需要格式转换的数据进行数据转换。MuleESB 不是取代现有程序架构,相反,MuleESB利用如Apache CXF、Spring等开源项目,对自己的项目进行了功能加强。 MuleESB 得以较好的解决各个系统、各种平台、各种复杂情况的整合。
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-concepts
3.2 Flows概念与用途
Mule 的工作方式,就是响应外部资源发起的事件(遵循EDA事件驱动架构)。在Mule应用中,事件被定义为Message。在一个流程中,首先从Message Source(如Http Listener)接收Messge,再通过消息处理器Message Processors进行处理。
Flow就是消息处理器构成的一个序列,消息进入序列会通过很多处理器。
Flow简图
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-application-architecture
3.3 Mule Message 概念和构成
MuleMessage是在Flow中传递的数据。它最主要的两个组成部分是header消息头和payload消息正文。
Message是嵌入在Message Object中的,下图是Message Object的结构:
MuleMessage的header和payload信息,相当于对不同协议下消息的封装。如Http请求的header和请求数据(payload),文件协议的文件信息(header)和文件内容(payload)。
Properties是存在于消息头中进行传递的信息,有助于消息的处理和避免错误的发生。Properties有两个作用域,inbound和outbound。
Variables是用户定义的信息数据,它有三个作用域,Flow variables、Session variables 和Record variables。
Properties和Variables的设置和获取可以通过Property和Variable组件或者MEL表达式的方式实现。如:#[message.outboundProperties]、#[flowVars]等。
Payload是消息的正文,包含需要处理的Message数据。设置和获取Payload内容可以通过Set Payload、Message Enricher 等组件或者MEL表达式的方式实现,如:#[payload=”hello”]。
DataSense explorer可以实时地查看Message的一些属性信息。
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-message-structure
Elements in a Mule Flow
Flow中包含多种不同类型的元素,用于构成Message Source和Message Processors。在Anypoint Studio中右侧的面板中可以找到这些组件。
https://docs.mulesoft.com/mule-user-guide/v/3.9/elements-in-a-mule-flow
3.4 Connectors
Connectors通过协议连接SaaS服务与本地部署的应用如MongoDB,Salesforce等系统。它用于在Mule和其他系统间接收和发送信息,如文件、数据库或者Web services。
Connectors分为Endpoint-BasedConnectors和Operation-BasedConnectors。
Endpoint-Based Connectors分为inbound endpoints(用于提供一个消息源,位于flow的第一个节点)和outboundendpoints(用于向其他系统发送信息,位于flow的中间或尾节点)。如File、JMS等。
Operation-Based Connectors用于进行特殊的操作,具体操作根据节点的构成来决定,如<http:listener>,用于开启一个http监听的端口;<db:select>,用于执行一个数据库查询操作。
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-connectors
3.5 Scopes
提供的用于子流程、异步调用、轮询等处理的作用域。
最基本的Flow组件就属于Scope,在该Flow中的组件都是属于同一个单元。其他常用的作用域如transactional,将所有的message processors封装起来,这样消息的处理会同时成功或失败,从而保证了如数据库更新操作的准确性。
3.6 Components
覆盖各种用于业务逻辑处理、数据处理和服务调用的组件,如JavaScirpt、Logger等。可以通过不同的脚本语言完成特殊的业务需求。
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-components
3.7 Transformers
包含各种进行数据格式转换的组件,也可以通过脚本语言进行转换。如自定义java类继承AbstractMessageTransformer类,就可以对Message的数据进行处理。也可以直接使用数据格式转换的组件,如File to Byte Array,可以将文件内容转换为字节数组。
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-transformers
3.8 Filters
Filters用于消息的过滤,决定消息是否可以通过该节点。比如可以在入口节点处配置Filter过滤特定范围的IP。最简单的Filter—Expression Filter,可以通过MEL表达式实现过滤效果。
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-filters-scopes-and-routers
3.9 Flow Control、Error Handling、Security
Flow Control组件,用于控制Message在flow中的走向。常用的如Choice组件,可以简单地通过MEL表达式进行判断和分流。
https://docs.mulesoft.com/mule-user-guide/v/3.9/routers
Error Handling组件包含异常处理各种方式。
https://docs.mulesoft.com/mule-user-guide/v/3.9/error-handling
Security目前只有Oauth2 provider组件,用于提供认证服务的组件。
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-secure-token-service
3.10 MEL
MEL即Mule Expression Language。使用MEL可以方便地实现message数据的获取、设置和评估等操作。其形式为“#[]” ,语法近似javascript,常用的对象有payload、message等。
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-expression-language-mel
4. 应用实例
4.1 hello world (HttpAnd File)
该hello world采用的节点包括:
http listner:用于http/https协议的请求的监听。
Logger: 用于message日志的记录。
Set Palyload:用于替换消息正文的内容。
File: 用于实现文件的写入。
该流实现了监听http请求,打印日志,设置正文,写文件的处理。
helloweb.xml 部分代码:
4.2 jms connector
https://docs.mulesoft.com/mule-user-guide/v/3.9/jms-transport-reference
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
要使用Java消息服务,你必须要有一个JMS提供者,管理会话和队列。既有开源的提供者也有专有的提供者。
本例使用的是开源提供者Apache ActiveMQ。
基本步骤:
a. 本地启动ActiveMQ服务
b. 根据服务信息配置JMS Connector(发布端jms:outbound-endpoint)
c. 根据消息类型配置JMS Connector(接收端jms:inbound-endpoint)
d. 消息的发布监听Http Listener、推送请求Http Request
e. 处理数据类型转换和事务问题
Publishflow:
ReceiveAnd Send flow:
jms:activemq-connector:
4.3 BasicAuthentication
(1) 在Http Request节点中,提供了5种安全认证的策略。本节简要介绍下Basic认证方式的配置。
Basic认证即使用用户名和密码进行安全校验。需要在http:request-config标签中配置为Basic Authentication并携带username和password去访问页面。具体流程如下图:
(2)在Http Listener节点中,可以通过配置Spring Security的Basic验证方式来进行入站验证。具体配置如下:
4.4 OAuth2 - AuthorizationCode
(1)OAuth概念
OAuth 是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而不需要将用户名和密码提供给第三方应用。OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站在特定的时段内访问特定的资源。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。
几个比较重要的概念:
a. Resource owner 资源拥有者,即用户
b. Authorization server 认证服务器,提供认证服务
c. Resource server 资源服务器,保存用户信息
d. Client 即Consumer,第三方应用
一般情况下认证服务器和资源服务器都是由服务商提供
OAuth流程图
OAuth应用广泛,国内常见的OAuth认证开放平台有:
a.社交类:人人网、新浪微博
b.电商类:淘宝
c.综合类:腾讯
(2) mule中配置OAuth2应用
在Httprequest节点中,也提供了OAuth2的认证方式,本节将介绍其中一种身份认证方式:OAuth2的授权码模式,访问服务器受OAuth保护的资源。下面示例展示了创建Mule客户机应用程序, 在Github OAuth服务器身份验证后访问受保护的资源。
示例步骤如下:
A. 在github中新增OAuth Apps
HomepageURL: http://localhost:8083.
Authorizationcallback URL: http://localhost:8082/callback.
然后生成client ID 和client secret
B. 需要在http:request-config中配置oauth2:authorization-code-grant-type:
C. 访问逻辑如下图:
如果是第一次登录,请先到本地授权页面登录github授权,提醒授权成功后,登录本地访问页面。
D. 页面访问流程图
https://docs.mulesoft.com/mule-user-guide/v/3.9/authentication-in-http-requests
a.
通过本地登录授权页面***/login,开启oauth认证过程。
Github 登录界面
如未登录,则先登录,然后导向认证服务器:https://github.com/login/oauth/authorize
b. 用户选择是否给予授权
用户授权界面
授权终端需要携带:
client_id :应用程序的client ID,用于 API 识别应用程序。
redirect_uri :获得授权码之后,服务提供商重定向用户代理(比如浏览器地址)。
response_type: 表明授权类型,默认是 code。即授权码模式。
scope: 应用程序可以获得的授权级别,默认值为 read。
state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值,用于抵御CSRF 攻击。
c. 用户如果给予授权,认证服务器将用户导向客户端指定的redirect_uri,同时附上授权码;
返回授权码页面
d. 客户端收到授权码后,附上redirect_uri,向认证服务器申请令牌。这一步是在客户端的后台服务器上完成的,对用户不可见;
申请令牌URI包括:
API Token的终端 :https://github.com/login/oauth/authorize
client_id :即 app key / consumer key ,用于验证应用程序。
client_secret:即 app secret / consumer secret 用于验证应用程序。
grant_type :刚刚获得的授权码
redirect_uri :重定向URI,和第一步一致。
e. 认证服务器核对了授权码和重定向URI确认无误后,向客户端发送访问令牌和更新令牌。
URI包括:
access_token:访问令牌
token_type :令牌类型
expires_in :过期时间,单位为秒
refresh_token: 更新令牌,用来获取下一次的访问令牌。
scope:权限范围。