2013-04-30 74 views
0

我想在兩個servlet之間建立簡單的VM隊列測試,但沒有成功。問題在於請求總是超時,因爲在預期的時間範圍內沒有響應,OUT消息。Servlet之間的Apache駱駝VM隊列

「org.apache.camel.ExchangeTimedOutException:在30000毫秒內未收到OUT消息。」

servlet在Tomcat中運行並且都部署Apache Camel。這兩款應用都定義了駱駝上下文和簡單路由。基本設置應罰款像下面這個簡單的路由工作:

<route> 
    <from uri="servlet:///hello?servletName=app1" /> 
    <transform> 
     <simple>Hello world</simple> 
    </transform> 
</route> 

<route> 
    <from uri="servlet:///hello?servletName=app2" /> 
    <transform> 
     <simple>Hello world</simple> 
    </transform> 
</route> 

首先我不知道如果消息沒有到達APP2一樣timout是即使請求的路徑不會甚至定義(app2將缺少虛擬機路由)。所以問題可能在於如何使用VM隊列定義兩個servlet之間的路由。

如果servlet之間的路由沒問題,那麼問題應該在丟失/不正確的答覆中。我明白,接收端應該返回的答覆,因爲從Web服務器的傳入請求是inOut類型,但我不知道如何實現這一點。

接收網絡請求APP1路線:

<route> 
    <from uri="servlet:///test?servletName=app1" /> 
    <to uri="vm:test"> 
</route> 

和servlet的APP 2的另一端:

<route> 
    <from uri="vm:test" /> 
// Tested here: output with <simple>, 'To', 'inOut'... the result is always timeout 
</route> 

由於我是新與Apache駱駝的根本原因很可能是非常簡單。任何幫助將不勝感激。

問題很簡單,如何在兩個servlet應用程序之間設置VM隊列?

回答

1

VM元件在同一類作品,如還挺就是我們說的虛擬機文件頁面上:http://camel.apache.org/vm.html

該組件在該VM SEDA成分不同支持跨CamelContext實例 通信 - 讓你可以使用此 機制跨Web應用程序進行通信(前提是 camel-core.jar位於系統/ boot類路徑中)。

因此,如果您使用Apache Tomcat,則需要將camel-core JAR作爲共享JAR。比如在某個地方的啓動類路徑中。

+0

我完全錯過了駱駝核心JAR需要共享的部分。現在我需要弄清楚如何在沒有嵌入駱駝內核的情況下打包.war,而是使用共享的。完成所有工作後,我會在此更新結果。謝謝克勞斯。 – Laowai 2013-05-01 04:20:33

+0

現在的問題是,如果我只將camel-core移動到Tomcat共享庫文件夾中,servlet將停止工作,因爲顯然有一些與日誌依賴關係有關的類加載器衝突。如果我還在共享庫下移動日誌依賴項(來自Maven Apache camel模板的標準依賴項),則會出現另一個類加載器相關的鏈接錯誤。我真的需要弄清楚哪些JAR要移動到共享文件夾,還是有一些已知的軟件包必須與駱駝內核或其他方式相匹配?將駱駝內核設置爲共享JAR的最佳實踐是什麼? – Laowai 2013-05-01 12:01:51

+0

通過正確配置日誌記錄並重新啓動Tomcat解決了依賴關係的問題。 – Laowai 2013-05-03 06:11:07