在MuleSoft中,創建Application的方式有三種
- Flow Designer:用於構建連接系統並使用API的集成應用程序的Web應用程序
- API Designer:用於設計,記錄和模擬API的Web應用
- Anypoint Studio:桌面IDE,用於實現API和構建集成應用程序
那么來看看如何使用Anypoint Studio創建一個Mule應用程序:
打開Anypoint Studio,新建一個Mule Project,輸入項目名稱:BolgTest

在創建Mule Project的界面上,可以看到整個界面核心分為:包資源管理器(Package Explorer)、畫布(Canvas)、mule 組件庫(Mule Palette)、控制台(Console)
- 包資源管理器:項目文件夾
- 畫布:Anypoint studio使用的組件都是直接拖拽搞定的,所以操作界面被稱為畫布
- Mule 組件庫:Mule Palette直譯過來應該是Mule 調色板,不過這東西本質上是很多Mule的組件,拖到畫布上就能使,所以我翻譯成組件庫
- 控制台:輸出日志,查看組件詳細信息的區域

MuleSoft出的這個Anypoint Studio一般來說不需要我們強編碼,他的體系更多的是一種配置化的實現,所有的組件都直接拖到畫布上進行配置,從這一點來說,很類似.Net的開發模式,甚至更加簡單,那么我們先拖一個HTTP的組件到畫布上,命名為:TestHttpListener

然后點擊 Basic Setting → 加號,打開 Global Element Properties窗口,確認參數配置是否為下列值
- Host: 0.0.0.0
- Port:8081

點擊OK,然后在Path 上填個測試的接口地址,比如 /test,最后Apply Changes.

接下來配置輸出內容,從Mule 組件庫拖一個Set Payload組件到畫布上

修改Set Payload組件的屬性,設置為 Test Message

Tips: Set Payload的屬性,設置Value的時候有兩種模式,一種是公式類型,也就是動態字段,一種就是文字類型,這里使用文字模式作為測試效果
我們可以啟動這個項目,右鍵畫布,選擇 Run Project,此時會看到控制台開始輸出啟動日志,也就是說這個Mule應用程序已經成功啟動

打開接口測試工具,選擇Get請求,地址為:http://localhost:8081/test,測試接口請求結果會發現,返回信息是我們輸入的 ”Test Message“

OK,在上面的Demo搞定后,我們來嘗試鏈接MySQL數據庫,這里會借助MuleSoft官方的測試接口進行
回到Anypoint Studo,關閉項目,然后右鍵刪除Set Payload組件,在Mule組件庫里面找Database,選擇Select 類型,然后拖到畫布上

接下來配置MYSQL的數據庫連接信息,點擊Basic Setting 右側的加號,打開 Global Element Properties屬性窗口,將Connection 設置為MySQL Connection,然后是數據庫賬號信息,分別如下:
- host: "mudb.learn.mulesoft.com"
- port: "3306"
- user: "mule"
- password: "mule"
- database: "training"

接着下載MySQL JDBC驅動程序,點擊Configure按鈕,選擇Add Maven dependency,搜索mysql- ,在顯示列表中選擇 mysql:mysql-connector-java,點擊Edit selected, 再點擊Finish,然后等待MySQL JDBC驅動器的下載

下載完成后,回到Global Element Properties,點擊Test Connection按鈕,應該會得到一個連接成功的信息,然后就可以關閉彈窗,關閉Global Element Properties窗口,回到主界面
Tips: 如果鏈接數據庫失敗,請確認3306端口的訪問有沒有被占用,或者被防火牆擋住

完成對數據庫的鏈接配置后,我們寫入SQL語句:SELECT * FROM american

此時如果你直接通過接口測試工具去訪問接口,會得到一個異常,這是因為還沒有配置數據輸出組件

在Mule組件庫中拖一個名為Transform Message的組件到畫布上,在Transform Message的屬性視圖中,我們修改輸出類型為output application/json,並將{}替換為payload,保存

然后重新啟動Mule應用程序,通過接口測試工具訪問接口Test,可以看到響應狀態200,並返回對應的JSON信息

根據之前在Anypoint平台的操作,接下來我們要嘗試的就是將接口傳遞回來的信息轉義成其他結構
點擊blogtestFlow,在屬性視圖中切換到Metadata,點擊Add metadata, 選擇Output:Payload,點擊編輯,在新的窗口點擊Add按鈕,設置Type Id為:american_flights_json,選擇Type為JSON,選擇Schema為Example,然后打開示例文件american-flights-example.json,點擊Select



american-flights-example.json 文件內容如下:
[{ "ID": 1, "code": "ER38sd", "price": 400.00, "departureDate": "2016/03/20", "origin": "MUA", "destination": "SFO", "emptySeats": 0, "plane": { "type": "Boeing 737", "totalSeats": 150 } }, { "ID": 2, "code": "ER45if", "price": 345.99, "departureDate": "2016/02/11", "origin": "MUA", "destination": "LAX", "emptySeats": 52, "plane": { "type": "Boeing 777", "totalSeats": 300 } }]
回到Transform Message屬性視圖,現在看到的界面如下:

接下來就是拖拽字段進行關聯映射
-
ID → ID
-
price → price
-
totalSeats → plane > totalSeats
-
toAirport → destination
-
takeOffDate → departureDate
-
fromAirport → origin
-
seatsAvailable → emptySeatsplane
-
planType → plane > type
比較特殊的,將兩個字段映射到同一個字段,會進行字符串的鏈接
- code1 → code
- code2 → code

字段映射成功后,保存修改,然后重新運行項目,通過接口測試工具查看接口返回值,前后JSON結構對比如下:

回到Anypoint Studio,我們發現接口已經調用成功,但是從接口描述上還沒有接口返回數據的示例,那么怎么做呢?回到Transform Message屬性視圖,點擊Preview,點擊 ”Create required sample data to execute preview“, 在input部分,出現一個新的頁簽payload,其中包含輸入元數據生成的樣本數據,在output部分,也可以看到對應的輸出JSON示例,不過看到很多???,在input中用任意字符串替換???即可


完成上述步驟后,我們復制一份流bolgtestFlow,粘貼在畫布的下方,這一過程直接Ctrl + C 然后在畫布上Ctrl + V即可,如下圖:

將第二個流程更名為getFlightsByID,方便調用和記憶,然后點擊getFlightsByID中的HTTP監聽器,修改路徑包含一個請求ID

然后修改數據庫中的查詢語句,同時傳入請求參數ID

保存然后運行項目,在接口測試工具上測試新的接口,可以看到,傳入不同的參數ID能拿到不同的記錄數據


以上是對MuleSoft借助Anypoint Studio開發的流程示例,以及一個簡單的get請求
