EnjoyingSoft之Mule ESB开辟教程第四篇:Mule Expressio


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

目次

  • 1. MEL的上风
  • 2. MEL的运用场景
  • 3. MEL的示例
  • 4. MEL的上下文工具
  • 5. MEL的Variable
  • 6. MEL接见属性
  • 7. MEL操纵符

本篇主要引见Mule表达式言语,Mule Expression Language,简称MEL。MEL是一种轻量级,在Mule ESB运用的表达式言语,可用于接见和盘算Mule Message的Payload,Property和Variable。险些每个Mule组件都能够运用MEL表达式。MEL表达式能够或许资助开辟者高效和文雅地过滤,路由,处置惩罚Mule message。关于Mule message基本概念,请参考第二篇和第三篇文章。

Mule ESB是一个运用Java言语,基于Spring框架编写的开源企业效劳总线,其相干源代码托管在GitHub上。企业效劳总线英文Enterprise Service Bus,简称ESB。

MuleESB在浩瀚开源的ESB中处于领先者的职位,具有来自世界各地数十万个开辟人员,凌驾数百万的下载量。MuleSoft公司也作为开源软件中的独角兽,2017年在纽交所胜利上市。我们作为MuleSoft的主要合作伙伴也介入个中,在六年多的时刻里,运用Mule ESB企业版开辟,或许Mule ESB社区版开辟,构建了浩瀚Mule ESB实行案例,资助国内浩瀚的企业胜利上线企业集成项目。

我们运用Mule ESB开辟的过程当中,体会到它优异的架构设想和高效的开辟速率。同时也深感Mule ESB开辟书本,Mule ESB中文文档资料异常希少,以是运用8篇文章来写基本Mule ESB开辟教程,解说怎样运用Mule ESB开辟。

  • EnjoyingSoft之Mule ESB开辟教程第一篇:初识Mule ESB
  • EnjoyingSoft之Mule ESB开辟教程第二篇:Mule ESB基本概念
  • EnjoyingSoft之Mule ESB开辟教程第三篇:Mule message structure - Mule message构造
  • EnjoyingSoft之Mule ESB开辟教程第四篇:Mule Expression Language - MEL表达式
  • EnjoyingSoft之Mule ESB开辟教程第五篇:掌握音讯的流向-数据路由
  • EnjoyingSoft之Mule ESB开辟教程第六篇:Data Transform - 数据转换
  • EnjoyingSoft之Mule ESB开辟教程第七篇:SOAP Web Service的消耗和建立
  • EnjoyingSoft之Mule ESB开辟教程第八篇:运用API构建Rest Service

1. MEL的上风

在Mule ESB上有许多要领能够操纵Mule Message,好比Java言语或许其他脚本言语(好比JavaScript等)。然则MEL表达式是Mule引荐运用,在Mule运用中的一个统一和规范的要领。

  • MEL表达式为开辟人员供应了一个一致的规范化言语,用来接见和盘算Mule Message的Payload(负载),Property(属性)和Variable(变量)。
  • MEL基于Mule特定的工具,Studio中供应auto-complete(自动完成,语法提醒)的功用,资助开辟者疾速编码。
  • 更主要的是,Mule的绝大多数组件都支撑MEL,好比路由组件,过滤组件等。

MEL的示例,这个示例在在Mule的Logger组件中运用MEL表达式猎取FlowVars。

从下图能够看到,我们在Logger组件中运用MEL表达式,能够或许供应语法提醒,该提醒带出了上一步设定的customerNo变量。

XML设置装备摆设以下:

<flow name="mel-flow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
        <set-variable variableName="customerNo" value="#[1008]" doc:name="customerNo"/>
        <logger message="The customerNo is #[flowVars.customerNo]" level="INFO" doc:name="Logger"/>
</flow>

注重:MEL是一种表达式,和脚本言语相似,但实在不相同。表达式一般用于动态猎取值或许设定值,或对数据举行简朴的操纵。表达式言语和脚本言语之间在功用上存在堆叠,但若是您编写的内容异常复杂,须要的不仅仅是几行代码,或许您须要包罗前提逻辑,那末脚本言语一般会更有用。若是简朴的猎取或设定值,挪用要领或实行函数,则运用表达式则更轻易。

2. MEL的运用场景

MEL表达式常常使用的运用场景也许能够分红三种。

  • 猎取值
    • #[payload]
      • 透露表现猎取message的负载
    • #[message.inboundProperties.'http.query.params'.customerNo]
      • 透露表现猎取查询参数customerNo
    • #[payload.callMethod(parameters)
      • 透露表现挪用payload工具的callMethod要领,并猎取要领返回值
    • #[xpath('//root/element')]
      • 透露表现运用xpath语法剖析并猎取响应节点内容。
  • 前提对照,返回的效果就是布尔变量
    • #[payload.amount > 2000]
    • #[message.inboundProperties.'http.method' == 'GET']
      • 透露表现推断HTTP请求是否是GET要领
  • 设定值,一般用于Message Enricher组件。
    • #[flowVars.dbResult]
      • 这里透露表现响应的值设定到dbResult变量中。

3. MEL的示例

  1. 运用表达式提取值,依据音讯的内容,属性决议实行流程。鄙人面的示例中,payload是一个Java工具,我们依据购置范例,将定单分发路由到分歧的JMS音讯行列中。

    <choice>
       <when expression="#[payload.getOrderType() == 'book']">
            <jms:outbound-endpoint queue="bookQueue" />
        </when>
       <when expression="#[payload.getOrderType() == 'music']">
            <jms:outbound-endpoint queue="musicQueue" />
        </when>
    </choice>
  2. 运用表达式提取值,并将值通报给Connector,以下示例就是运用MEL盘算的值设定SMTP Connector的邮件题目,邮件接收人等。

    <smtp:outbound-endpoint from="#[flowVars.mailFrom]" to="#[flowVars.mailTo]" subject="#[payload.mailSubject]"  doc:name="SMTP"/>
  3. 若是payload是Java工具,能够挪用payload要领,猎取要领的返回值。示例就说挪用calAmount要领,并打印盘算出来的金额。

    -玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-
    <logger message="#[payload.calAmount()]" />

4. MEL的上下文工具

我们在上述的MEL表达式示例中能够看到MEL有多个局部构成,第一局部就是上下文工具。MEL罕见的上下文工具以下:

上下文工具 申明
#[server] 以后效劳器,能够猎取效劳器的时刻,JDK版本等,如#[server.dateTime],#[server.javaVersion]
#[mule] 以后Mule实例,能够猎取Mule的版本,目次等。如#[mule.version]
#[app] 以后Mule运用的实例,能够猎取运用的称号等。如#[app.name]
#[message] 这个是我们最常常运用的工具,就说Mule message。如#[message.payload],#[message.inboundProperties.'http.query.params'.customerNo]等

server上下文工具的常常使用属性:

Field Field形貌
dateTime 体系以后时刻
host 主机名
ip 主机IP
osName 操纵体系称号
userName 以后用户
userDir 以后用户事情目次

mule上下文工具的常常使用属性:

Field Field形貌
home Mule Runtime的装置目次
version Mule Runtime的版本
nodeId 集群下的本机ID
clusterId 集群ID

app上下文工具的常常使用属性:

Field Field形貌
name Mule App运用称号
workdir Mule App事情目次

message上下文工具的常常使用属性:

Field Field形貌
id message的独一ID
rootId message的根ID
payload message的负载
inboundProperties message的inbound头信息
inboundAttachments message的inbound附件信息
outboundProperties message的outbound头信息
outboundAttachments message的outbound附件信息

5. MEL的Variable

分歧于第4点提到的上下文工具,MEL中还能够运用变量,运用变量实在不请求在表达式中运用上下文工具。变量是顶层的标识符。MEL中罕见的变量以下:

  • flowVars - flowVars的有用局限是在一个Flow中,界说flowVars以后,后续的Message Processor都能够运用。
  • sessionVars - 在跨Flow通讯时,能够运用sessionVars来通报变量。须要注重的是,sessionVars实在不老是有用的,实在取决于Inboud Endpoint的范例。后续再出专题引见flowVars和sessionVars等之间的区分。
#[flowVars.foo = sessionVars.bar]

上述的表达式的意义是,将session变量赋值给flow变量。

6. MEL接见属性

  1. 点语法。实用工具一般是Java Pojo。MEL中能够运用点语法来接见相干的工具属性,一样工具属性的属性也是能够用点号来接见的。

    #[message.payload.item.name]
  2. Null安全性接见。Java编程中常常碰到NullPointerException毛病,也就是说对空工具举行接见操纵会报错。而在MEL表达式,能够经由过程点语法.?来制止失足。以下示例,纵然item为null,该表达式依然不会报错,它会返回null值。

    #[message.payload.?item.name]
  3. 属性称号的转义。若是属性称号有特别字符,那末运用点语法会碰到问题,这个时刻能够单引号举行转义。以下示例,http.query.params是一个团体。我们接见这个属性名,必需运用单引号举行转义。

    #[message.inboundProperties.'http.query.params'.customerNo]
  4. 中括号语法。若是工具是数组,或许Map,那末能够运用中括号举行接见

    #[payload[5]]
    #[payload['userName']]

7. MEL操纵符

常常使用的操纵符以下,和一般的开辟言语相似。另有更多的操纵符能够查阅官方手册。

  1. 算术运算符 - / * %
  2. 对照运算符 == != > < >= <=
  3. 逻辑运算符 && ||

本文同步发文于EnjoyingSoft之Mule ESB开辟教程第四篇:Mule Expression Language - MEL表达式

接见EnjoyingSoft 网站,猎取更多Mule ESB 实行,Mule ESB 社区版 实行,Mule ESB实行,Mule ESB社区版实行资助。

迎接转载,但必需保存原文和此段声明,且在文章页面显着地位给出原文链接,不然保存追查法律责任的权益。

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。