優勢
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好用html
缺點
1.集羣很是弱,只能配置一個主實例和一個從實例,不支持flow和基於模式的配置,可使用nginx集羣,效果還能夠接受
2.企業版和社區版區別 https://www.mulesoft.com/cn/platform/soa/mule-esb-enterprisejava
教程
https://developer.mulesoft.com/tutorials-and-how-tosmysql
鏈接mysql數據庫,部署在mule-standalone-3.6.0容器中,經測試能夠正常鏈接查詢數據庫(4.1.1版本部署有問題)linux
正在測試在Tomcat容器下部署(較繁瑣官網demo有偏差),並用nginx作集羣
tomcat下部署成功。可是tomcat下部署很是麻煩,
1項目須要修改爲Maven項目,配置web.xml
2tomcat中須要配置不少mule的jar包,配置繁瑣且容易出錯
3各類版本兼容問題
4啓動部署慢須要 107710msnginx
http://192.168.1.39/Test
後通過調研 使用mule提供的官方mule-standalone容器便可,通過測試部署成功,而且用nginx作了負載均衡,部署了2個mule應用,均可以訪問,可是須要修改mule中http的端口號,
mule-standalone容器中沒法修改,跟tomcat有區別,mule項目中配置監聽端口才會生效,端口跟項目中的Http配置走,理論能夠監放任何端口。git
項目中Http配置必須配置成All Interfaces [0.0.0.0] (Default) 不能配置localhost 不然部署到linux下,只能本地localhost訪問。很大的坑(注意)github
demo
https://docs.mulesoft.com/mule-user-guide/v/3.9/mel-cheat-sheetweb
CE 社區版本 EE企業版本
https://docs.mulesoft.com/anypoint-mq/sql
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調用亂碼問題
<head>
<meta http-equiv="Content-Type" content="txt/plain;charset=utf-8"/>
</head>
<form action="http://localhost:8081/createOrder" method="post" accept-charset="GB18030">