2011-10-19 50 views
1

我試圖配置一個組播路由,它接收一個HTTP POST並將它發佈到一個服務的多個實例。如何從駱駝servlet組件路由到http組件?

從閱讀的文檔,並與駱駝例如,servlet的tomcat的播放,它看起來像它應該是簡單的,但我堅持。這question是有幫助的,但我仍然堅持。

這裏是我的配置駱駝的Servlet的web.xml:

<web-app...> 
<!-- location of spring xml files --> 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 
<!-- Camel servlet --> 
<servlet> 
<servlet-name>MulticastServlet</servlet-name> 
<servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<!-- Camel servlet mapping --> 
<servlet-mapping> 
<servlet-name>MulticastServlet</servlet-name> 
<url-pattern>/send/*</url-pattern> 
</servlet-mapping> 
<!-- the listener that kick-starts Spring --> 
<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<welcome-file-list> 
<welcome-file>WEB-INF/index.xhtml</welcome-file> 
</welcome-file-list> 
</web-app> 

這裏是我的駱駝上下文和路線:

<camelContext trace="true" id="multicastCtx" 
xmlns="http://camel.apache.org/schema/spring"> 
<route id="multicastRoute"> 
<from uri="servlet:///license"/> 
<multicast stopOnException="false"> 
<to uri="http://192.168.22.95:8135/transform-service/send/license"/> 
<to uri="http://10.50.1.58:9080/send/license"/> 
</multicast> 
</route> 
</camelContext> 

該服務預計請求參數數據。我可以通過http工具(Firefox的「海報」插件)直接發佈到兩個端點URI。

然而,當我發佈這個Web應用程序(在碼頭上運行),在URI「http://localhost:8080/send/license」我得到一個404錯誤。在碼頭調試日誌,我看到「DEBUG [CamelHttpTransportServlet.service]:沒有消費者 服務請求[POST /發送/許可證]」

我試圖簡化路線是這樣的:

爲了簡化路線,我放棄了多播組件,因此它看起來 這樣的:

<route id="myRoute" streamCache="true"> 
<from uri="servlet:///license"/> 
<to uri="http://192.168.22.95:8135/transform-service/send/license"/> 
</route> 

,但我得到了同樣的錯誤。使用<from uri="servlet:///0.0.0.0:8080/send/license"/>,我得到相同的錯誤。

我失去了在配置的URI駱駝servlet的一些東西明顯?

回答

7

如果你不爲你的servlet作爲CamelServlet使用默認名稱,那麼你需要參考該名稱的端點URI,

<from uri="servlet:///license"/> 

然後應

<from uri="servlet:///license?servletName=MulticastServlet"/>