MEL语法学习笔记v.docx

上传人:b****5 文档编号:11844930 上传时间:2023-04-05 格式:DOCX 页数:14 大小:266.20KB
下载 相关 举报
MEL语法学习笔记v.docx_第1页
第1页 / 共14页
MEL语法学习笔记v.docx_第2页
第2页 / 共14页
MEL语法学习笔记v.docx_第3页
第3页 / 共14页
MEL语法学习笔记v.docx_第4页
第4页 / 共14页
MEL语法学习笔记v.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

MEL语法学习笔记v.docx

《MEL语法学习笔记v.docx》由会员分享,可在线阅读,更多相关《MEL语法学习笔记v.docx(14页珍藏版)》请在冰豆网上搜索。

MEL语法学习笔记v.docx

MEL语法学习笔记v

目录

一、MEL语法规则及定义2

1.1MEL(MuleExpressionLanguage)语法介绍2

1.2MEL上下文对象(ContextObjects)2

1.2.1Server3

1.2.2Mule4

1.2.3App5

1.2.4Message5

1.3MEL运算符6

1.3.1数学运算6

1.3.2比较运算6

1.3.3逻辑运算7

1.4MEL变量(Variables)8

1.5数据提取函数(DataExtractionFunctions)8

1.3字典、列表、数组(Map,List,andArray)9

二、MEL语法实践9

2.1消息过滤器(MessageFilters)9

2.2消息选择路由(ChoiceRouters)9

2.3消息转换器(ExpressionTransformers)10

2.4连接器(Connectors)10

2.5日志组件(Loggers)10

2.6动态端点(DynamicEndpoints)11

2.6表达式组件(ExpressionComponents)12

一、MEL语法规则及定义

1.1MEL(MuleExpressionLanguage)语法介绍

Mule表达式格式表现为:

 #[] .

表达式语言类似于脚本语言,它允许你用精简的脚本动态实现取值、赋值、操作消息等。

如果你想实现更复杂的逻辑,那么建议采用脚本语言,如果你想快速简单的实现取值复制以及函数调用等操作,采用表达式语言更方便。

目前Mule支持两种表达式语言:

1.Mule3.3以前的版本,表达式格式表现如:

#[evaluator:

expression]

2.Mule3.3,MuleExpressionLanguage【MEL】,表达式格式表现如:

#[expression]

老版本和新版本的不同是,老版本需要指定Evaluator,而新版本就是MEL本身。

语法介绍:

表达式

描述

#[2+2] 

该表达式取值等于4.

#[2+2==4]

该表达式为逻辑表达式,取值为true.

#[message]

该表达式引用了MEL中四个上下文对象中的message对象,该表达式取值为message对象的值。

四个上下文对象包括:

(message, app, mule,and server).具体对象参数介绍请见下文。

#[message.payload]

该表达式链接了message对象的payload属性。

#[message.payload['name']]

该表达式链接了message对象的payload属性中name变量中的值。

注意,name是由单引号括起来的,这是由于mule的配置文件采用的是双引号,所以这里只能使用单引号。

#[message.payload[4]]

同上一表达式一样,只是这里是通过数字索引来引用该值。

#[message.header.get()]

该表达式链接了message对象的header对象,并调用get方法。

1.2MEL上下文对象(ContextObjects)

Contextobjects包括消息对象以及它的环境变量。

MEL包括四个上下文对象:

Server:

包括硬件、操作系统、用户、网络接口等属性。

Mule:

包括Mule实例的所有属性。

App:

包括当前Mule应用的所有属性。

Message:

包括当前Mule消息的所有属性。

MEL中默认的上下文对象为message。

例如:

#[message.payload]可以写为:

#[payload],即省略了message对象。

MEL上下文对象属性地图:

server

mule

app

message

fileSeparator

clusterId

encoding

id

host

home

name

rootId

ip

nodeId

standalone

correlationId

locale

version

workdir

correlationSequence

javaVersion

 

registry

correlationGroupSize

javaVendor

 

replyTo

osName

dataType

osArch

payload

osVersion

inboundProperties

systemProperties

inboundAttachments

timeZone

outboundProperties

tmpDir

outboundAttachments

userName

exception

userHome

 

userDir

1.2.1Server

该对象的属性仅提供读取不能改写,包括硬件、操作系统、用户、网络接口等信息:

名称

描述

fileSeparator

文件路径分隔符("/"onUNIXand"\"onWindows)

host

服务器全名,如

ip

服务器IP地址

javaVendor

JRE供应商名称

javaVersion

JRE版本

locale

Defaultlocale(oftypejava.util.Locale)oftheJRE(canaccessserver.locale.languageandserver.locale.country)

osArch

操作系统架构

osName

操作系统名称

osVersion

操作系统版本

systemProperties

系统属性地图

timeZone

JRE默认时区

tmpDir

JRE临时目录

userDir

用户工作空间目录

userHome

用户主目录Userhomedirectory

userName

用户名

举例:

'server.userName'表示当前用户的名称。

1.2.2Mule

该对象的属性仅提供读取不能改写,包括Mule实例属性:

名称

描述

clusterId

ClusterID,集群ID

home

Mule服务器安装目录

nodeId

ClusternodeID,集群节点ID

version

Mule版本

1.2.3App

该对象的属性大部分仅能读取,部分可读可写:

Name

Description

encoding

默认编码Applicationdefaultencoding(只读)

name

应用名称(只读)

standalone

Mule是否单机独立服务器,是则返回True(只读)

workdir

应用工作目录Applicationworkdirectory(只读)

registry

当前Mule应用的变量注册地图MaprepresentingtheMuleregistry(可读可写)

举例:

'app.registry['foo']'代表注册在地图中的名称为foo的对象,可以取值或赋值。

1.2.4Message

ThisobjectprovidesaccesstothepropertiesoftheMulemessagelistedinthetable.Themeaningsofmostofthesepropertiesaredocumentedelsewhere,nothere.

Name

Description

id

(只读)

rootId

(只读)

correlationId

关联ID(只读)

correlationSequence

(只读)

correlationGroupSize

(只读)

replyTo

(可读可写)

dataType

(只读)

payload

消息负载(可读可写)

inboundProperties

Map(只读)

inboundAttachments

Map(只读)

outboundProperties

Map(可读可写)

outboundAttachments

Map(可读可写)

exception

(只读)

1.3MEL运算符

MEL运算符遵循标准JAVA语法,但是操作数都为值类型而非引用类型。

举例:

"A"=='A'返回true,,但同样的表达式在Java中返回false。

1.3.1数学运算

Symbol

Definition

Example/Value

+

加法。

.Fornumbers,thevalueisthesumofthevaluesoftheoperands.Forstrings,thevalueisthestringformedbyconcatenatingthevaluesoftheoperands.

2+4 6 'fu'+'bar' TheString"fubar"

-

减法。

Thevalueisthevalueofthefirstoperandminusthevalueofthesecond.

2-4 -2

/

除法。

Thevalueisthevalueofthefirstoperanddividedbythevalueofthesecond.

2/4 0.5

*

乘法。

Thevalueistheproductofthevaluesoftheoperands.

2*4 8

%

取余。

Thevalueistheremainderafterdividingthevalueofthefirstoperandbythevalueofthesecond.

9%4 1

1.3.2比较运算

Symbol

Definition

Example/Value

==

等于.Trueifandonlyif(iff)thevaluesoftheoperandsareequal.

'A'=='A' true

!

=

不等于.Trueiffthevaluesoftheoperandsareunequal.

'A'!

='B' true

>

大于。

Trueiffthevalueontheleftisgreaterthanthevalueontheright.

7>5 true

<

小于。

Trueiffthevalueontheleftislessthanthevalueontheright

5<5 false

>=

大于等于。

Trueiffthevalueontheleftisgreaterthanorequaltothevalueontheright.

5>=7 false

<=

小于等于。

Trueiffthevalueontheleftislessthanorequaltothevalueontheright.

5<=5 true

contains

包含。

Trueiffthestringontherightisasubstringofthestringontheleft.

'fubar'contains'bar' true

is, instanceof

类型判定。

Trueiftheobjectontheleftisaninstanceoftheclassontheright.

'fubar'isStringtrue

strsim

相似度,取值介于0到1之间,表示两个字符串之间的相似程度。

'foo'strsim'foo' 1.0 ‘foobar’strsim‘foo’ 0.5

soundslike

是否谐音。

如果两个字符串发音相似那么返回True。

(判断标准依据一种语音算法)

'Robert'soundslike'Rupert' true

1.3.3逻辑运算

Symbol

Definition

Example/Value

and

逻辑与.Trueifbothoperandsaretrue.(注意不要使用&&,因为可能与配置文件符号冲突)

(a==b)and(c!

=d) trueiffa=bandc≠d

||

逻辑或.。

至少有一个为真则返回True。

true||anything 

Always true

or

ChainedOR。

从左到右遍历返回第一个不为空的对象。

falseor''or''or'dog' 

TheString"dog"

1.4MEL变量(Variables)

除了MEL本地变量(作用区域仅限于当前消息执行器)外,MEL还提供两种变量:

流程变量flowVars、会话变量sessionVars。

变量名

说明

flowVars

作用区域为当前flow。

你可以在前一个消息执行器设置它的值,在下一个读取。

SessionVars

作用区域为当前会话。

基本与flowVars一样外,它还可以在flow之间通过MuleEndpoint进行传递。

示例:

flowVars['foo']=sessionVars['bar'],如果没有重名的本地变量,甚至可以直接使用foo或bar,解释器首先在flowVars寻找该变量,然后是sessionVars。

如果你不希望解释器自动寻找变量,可以在配置文件中加入以下配置:

1.5数据提取函数(DataExtractionFunctions)

名称

说明

Xpath

数据提取对象默认为payload,如xpath('/orders/order[0]');可以显示指定提取对象,如xpath('/orders/order[0]',message.inboundAttachment['order']) 

Regex

返回匹配字符串。

如同Xpath,默认也是针对payload,也可以显示指定提取对象。

如:

regex(TBD,message.inboundAttachment['order'])

1.3字典、列表、数组(Map,List,andArray)

map:

[key1:

value1,key2:

value2,...];

list:

[item1,item2,...];

array:

{item1,item2,...},在JAVA中需要指定数组中元素的类型,但在MEL中是无类型的。

二、MEL语法实践

2.1消息过滤器(MessageFilters)

ExpressionFilter最简单的应用就是判断是否传递该消息还是忽略该消息。

例:

2.2消息选择路由(ChoiceRouters)

选择路由作用就是根据MEL表达式将消息导向正确的分支。

例:

2.3消息转换器(ExpressionTransformers)

消息转换器即根据表达式计算得结果赋予当前消息的payload属性。

例:

'"/>

2.4连接器(Connectors)

MEL表达式可以为连接器的参数或属性赋值,传递参数等。

例:

2.5日志组件(Loggers)

MEL表达式可以为Component提供消息参数等。

例:

2.6动态端点(DynamicEndpoints)

动态端点的含义是URI中含有MEL表达式的端点。

例:

注意:

此例中,#[]标识符中包含了一组表达式,通过“分号”间隔,第一个表达式给filename赋值,第二个表达式是一个JAVA方法调用。

2.6表达式组件(ExpressionComponents)

表达式组件通过MEL表达式实现赋值,设置变量等操作。

例:

三、其他高级应用

3.1注册Mule应用级对象

注册方法:

获取或者更新方法:

3.2对象作用域(ObjectScopes)

Mule中分为三种对象作用域:

Singleton:

单件,针对所有请求仅允许一个实例

Prototype:

原型,每一个请求一个实例

Pooled:

池对象,连接池对象,一次只能允许一个线程获取一个对象

Pooled对象相对于Prototype对象来说的优势是在于,有些对象的创建成本太高,可能会影响性能。

3.3配置模式(ConfigurationPatterns)

通过将消息执行块进行编排到流程中,Mule可以实现任何想实现的功能或业务流程。

Mule同时还包括配置模式的功能,每一种模式被设计来实现一个简单通用的功能。

当前有四种模式:

Øpattern:

bridge:

 桥接模式

Øpattern:

simple-service :

简单服务模式

Øpattern:

validator 类似单向桥接,特殊的是它需要校验消息

Øpattern:

web-service-proxy:

Web服务代理模式

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1