优点
1.开源 https://github.com/mulesoft/mule
2.丰富的connector ,可以通过不同的形式来连接各个系统JMS、Web Service、JDBC、HTTP等
3.components(组件)很多,可选的处理数据方式多
4.transformers也很丰富,可扩展 json、xml、dom、二进制、wsdl、java等
5.mule esb 采用java实现,java的优点之一进行企业级应用开发,esb 的作用就是提供各个系统之间的交互平台:数据传输总线,使用开源Java实现也是很多公司选择之一,用的企业多了,就会发展更快更加成熟
6.不修改现有组件,低耦合的实现业务逻辑和消息逻辑完全分离开
7.支持集群、故障转移和负载均衡,多种部署方式:Tomcat、BEA WebLogic、JBoss,经过调研发现还是自身自带的mule-standalone-3.9.0好用
缺点
1.集群非常弱,只能配置一个主实例和一个从实例,不支持flow和基于模式的配置,可以使用nginx集群,效果还可以接受
2.企业版和社区版区别 https://www.mulesoft.com/cn/platform/soa/mule-esb-enterprise
教程
https://developer.mulesoft.com/tutorials-and-how-tos
连接mysql数据库,部署在mule-standalone-3.6.0容器中,经测试可以正常连接查询数据库(4.1.1版本部署有问题)
正在测试在Tomcat容器下部署(较繁琐官网demo有误差),并用nginx做集群
tomcat下部署成功。但是tomcat下部署非常麻烦,
1项目需要修改成Maven项目,配置web.xml
2tomcat中需要配置很多mule的jar包,配置繁琐且容易出错
3各种版本兼容问题
4启动部署慢需要 107710ms
http://192.168.1.39/Test
后经过调研 使用mule提供的官方mule-standalone容器即可,经过测试部署成功,并且用nginx做了负载均衡,部署了2个mule应用,都可以访问,但是需要修改mule中http的端口号,
mule-standalone容器中无法修改,跟tomcat有区别,mule项目中配置监听端口才会生效,端口跟项目中的Http配置走,理论可以监听任何端口。
项目中Http配置必须配置成All Interfaces [0.0.0.0] (Default) 不能配置localhost 否则部署到linux下,只能本地localhost访问。很大的坑(注意)
demo
https://docs.mulesoft.com/mule-user-guide/v/3.9/mel-cheat-sheet
CE 社区版本 EE企业版本
https://docs.mulesoft.com/anypoint-mq/
jersey教程
https://jersey.github.io/documentation/latest/index.html
mule MEL
https://docs.mulesoft.com/mule-user-guide/v/3.9/mule-expression-language-mel
Mule Expression Language Reference
远哥视频 mule
http://i.youku.com/tavenli
1.必须熟悉MEL(Mule Expression Language)语言
2.了解MuleMessage结构和Payload对象
3.对常用的connector、scoper、component、transformer、filter、flowControl、errorHanding要熟悉
4.了解APIKit Router和 APIKit Console,熟悉RAML
MEL表达式
#[表达式]
#[server.dateTime] 获取服务器时间
#[2+2 == 4]
#[message.inboundProperties['http.query.params']['uId']] 获取http请求的uId参数
#[message.inboundProperties.city] / #[message.inboundProperties['city']]
#[xpath('/user/username').text]
#[payload]
#[json:visitGuid]
一般来说,当使用POST方法传递JSON数据到HTTP组件后,此时如果放置一个Logger组件,会发现经过HTTP组件后,payload的类型实际是org.glassfish.grizzly.utils.BufferInputStream,因为经过HTTP后将负载变为了流的形式了。
如果需要还原为JSON格式字符串,方法有两个:
(1)在HTTP组件后,使用Object to String组件将payload转为String,最简单的方法。
(2)使用MEL表达式#[message.payloadAs(java.lang.String)]
(3)java中可以继承AbstractMessageTransformer,然后通过MuleMessage类的getPayloadAsString()方法
mule四大对象
server / mule / app / message
Message Variables分为2中
flowVars 只在同一个Flow中使用
sessionVars 只在同一个appliaction下的所有Flow使用
安装安全组件
http://security-update-site.s3.amazonaws.com
mule调用乱码问题