2011-10-19 54 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"/>