天天看點

mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用

 1.5 運作、測試、部署mule應用

我們剛剛開發完成第一Mule應用,并設定了一個與它互動的消息代理。

現在看如何運作、測試和部署應用程式。

 1.5.1 運作應用

 運作應用前,需要把ActiveMQ的JAR包添加項目中。這和普通Eclipse項目添加JAR包過程一樣。

 在工程視圖面闆左邊右鍵單擊 Mule Runtime--選擇 Build Path--選擇Configure。

你将會看到如圖1.13的畫面,

mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用

現在已準備好運作應用程式了。但還是先修改一下flow,配置記錄日志并輸出到控制台。

選擇一個logger ,拖曳到flow的byte-array-to-string轉化器之後,JMS outbound endpoint之前。

通過使用Mule表達式設定消息屬性 ,以列印出消息payload中的字元串。

mule表達式語言--MEL,是一個輕量級的腳本語言,它在運作時才進行計算。

本例中發送給mule的是JSON格式資料。見圖1.14。

mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用

 右鍵單擊項目資料總管頁面上的項目并選擇Run As--Mule Application,

 如圖1.15,将在内嵌的Mule的執行個體中啟動應用程式。

 你到類似圖1.16在控制台,說明 應用程式正在運作。

mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用
mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用

日志顯示你的 byte-array-to-string 轉換器已成功的把輸入流轉換為了字元串。

打開ActiveMQ 控制台,看消息隊列裡是否收到消息。

在浏覽器輸入位址http://localhost:8161/admin/queues.jsp ,看到如圖 1.17所示界面

mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用

 1.5.2 測試流

 現在可以手工的驗證流的運作情況了,再來寫個測試方法驗證流的運作情況。

 建立類ProductServiceFunctionalTestCase,内容如下:

public class ProductRegistrationFunctionalTestCase extends FunctionalTestCase {
     protected String getConfigResources() {
        return "./src/main/app/product_registration.xml";
     }
    @Test
    public void testCanRegisterProducts() throws Exception {
        MuleClient client = muleContext.getClient();
        //(1) JSON格式的産品資料
        String productAsJson = "{\"name\":\"Widget\", \"price\": 9.99,
                \"weight\": 1.0, \"sku\":\"abcd-12345\"}";

        // (2)把JSON字元串發送到 http://localhost:8080/products
        client.dispatch("http://localhost:8080/products",productAsJson, null);
        // (3)在JMS products消息隊列取消息
        MuleMessage result = client.request("jms://products",RECEIVE_TIMEOUT);
         //(4)斷言傳回結果非空
        assertNotNull(result);
        assertNull(result.getExceptionPayload());
        assertFalse(result.getPayload() instanceof NullPayload);
        // (5)斷言JMS消息payload資料和發送的資料相同
        assertEquals(productAsJson, result.getPayloadAsString());
       }
}
           

我們将在第12章詳細讨論測試,先來預習一下。

 FunctionalTestCase類是mule 提供的一個基礎類,它抽象了啟動和關閉mule執行個體的一些細節。

 上面的測試案例就繼承了FunctionalTestCase。 

 getConfigResources()方法,用來指明啟動melu 時使用的配置檔案。

 Mule的測試架構使用JUnit 4,你可以在方法testCanRegisterProducts上使用@TEST注解。

 可使用MuleClient(第12章進行描述的講解)以程式設計的方式與用mule進行互動。

 代碼(1)處,建立一個簡單的JSON作為測試資料。

 代碼(2)處,把JSON資料POST到一個HTTP endpoint.

 代碼(3)處,發送到消息到JMS的隊列.

 代碼(4)處,當收到傳回值或逾時後開始執行

 代碼(5)處,先做一系列的斷定來確定response不是null且處理過程沒抛出異常,

                        然後判斷JMS收到的消息内容是否和發出的請求資料一緻。

 右鍵單擊測試類--選擇Run As--JUnit Test。

 這将啟動Mule,并運作你的測試類。 

 如果一切順利,你應該可以看到一個綠條--表示測試通過(見圖1.18)。

mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用

 1.5.3  xml配置檔案

 使用Mule Studio的圖形化編輯器可以開發非常複雜的內建應用 。

 你即使不修改的話也應當看一眼 Mule Studio生成的xml配置檔案。

 這不僅有利于你了解mule運作原理,而且使你更好的使用mule架構。

 本書中示例将主要集中在流的XML配置檔案。也會顯示 Mule Studio中有意義的流的截圖。

 注意mule的社群版沒有依賴與Mule Studio的功能。

 你用不用IDE和運作mule 應用是沒有關系的。

 輕按兩下xml配置檔案,其内容如下:

<mule xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
	xmlns:spring="http://www.springframework.org/schema/beans" 
	xmlns="http://www.mulesoft.org/schema/mule/core"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns:jms="http://www.mulesoft.org/schema/mule/jms"
	xsi:schemaLocation="
	http://www.mulesoft.org/schema/mule/jms
	http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd
	http://www.mulesoft.org/schema/mule/http
	http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
	http://www.mulesoft.org/schema/mule/http
	http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
	http://www.mulesoft.org/schema/mule/jms
	http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-current.xsd
	http://www.mulesoft.org/schema/mule/core
	http://www.mulesoft.org/schema/mule/core/current/mule.xsd "
	version="CE-3.4.0">

    <!-- 上面是命名空間定義 -->
	<description>
		Mule Application to REST-fully Accept Product Data
	</description>
	
	<!-- 使用Active MQ作為 JMS連接配接器的配置 -->
	<jms:activemq-connector name="jmsConnector" doc:name="Active MQ" />
        <!-- 流的名字 -->
	<flow name="product.registration" doc:name="product.registration">
	
		<!-- 配置HTTP inbound  endpoint  --HTTP 接入端口 ,-->
		<http:inbound-endpoint host="localhost" 
				       port="8080"
			               path="products" doc:name="HTTP" />
			                   
		<!-- 配置位元組流到字元串的轉換器 -->
		<byte-array-to-string-transformer doc:name="Byte Array to String" />
		
		<!-- 配置 JMS的接出端口 -->
		<jms:outbound-endpoint queue="products"
			connector-ref="jmsConnector" doc:name="JMS" />

	</flow>
</mule>      

首先注意命名空間聲明。--可以了解為java類中的import。

 流和消息處理器的配置會使用到這些命名空間的元素。

 配置檔案中的流和消息處理器是與你從圖形界面的配置是一一對應的。

 mule2 的使用者可能會高興的發現mule studio 可以自動引入命名空間,

 再也不用每次手工導入了。

1.5.4 部署到單獨的mule伺服器

 部署前先要運作一個獨立的mule伺服器。

 你可以到www.mulesoft.org/download-mule-esb-community-edition去下載下傳。

 之後解壓縮檔案,到bin目錄下,然後運作 mule的可執行檔案來啟動Mule伺服器執行個體。

現在,将使用Mule的Studio建構部署檔案。

首先,你需要把應用程式導出為一個Mule的部署檔案。

右鍵-選擇導出-選擇Mule Studio Project,然後設定ZIP檔案存放路徑, 

見圖1.19,1.20,和1.21。

mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用
mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用
mule in action翻譯7 : 1.5 運作、測試、部署mule應用 1.5 運作、測試、部署mule應用

把導出的ZIP檔案放到 Mule 伺服器的apps目錄下,稍後mule控制台顯示如下資訊:

INFO 2011-12-19 10:01:07,741 [Mule.app.deployer.monitor.1.thread.1]

org.mule.module.launcher.DeploymentService:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ Started app 'productservice-1.0-SNAPSHOT' +

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ok ,隻是20幾行的xml和少量的java代碼,就開發完成了你的內建應用。

是不是很簡單?體會到mule的簡單強大了吧!

如果沒有mule下面這些事都需要你自己做:

1、啟動一個web server接受HTTP請求

2、配置JMS工廠、session 等等

3、對應用進行功能測試

4、确定怎麼打包盒部署

寫很多代碼卻完成不了你的目标,這會浪費大量時間。

本書中你會看到大量的  使用mule來簡單快速地完成內建任務的例子。

1.6 總結

至此簡單介紹了企業內建,了解應用內建的理念和Mule3的功能,

并且編寫,測試和部署了Mule應用。

接下來,我們将讨論Mule的消息處理。

繼續閱讀