我想在两个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队列?
我完全错过了骆驼核心JAR需要共享的部分。现在我需要弄清楚如何在没有嵌入骆驼内核的情况下打包.war,而是使用共享的。完成所有工作后,我会在此更新结果。谢谢克劳斯。 – Laowai 2013-05-01 04:20:33
现在的问题是,如果我只将camel-core移动到Tomcat共享库文件夹中,servlet将停止工作,因为显然有一些与日志依赖关系有关的类加载器冲突。如果我还在共享库下移动日志依赖项(来自Maven Apache camel模板的标准依赖项),则会出现另一个类加载器相关的链接错误。我真的需要弄清楚哪些JAR要移动到共享文件夹,还是有一些已知的软件包必须与骆驼内核或其他方式相匹配?将骆驼内核设置为共享JAR的最佳实践是什么? – Laowai 2013-05-01 12:01:51
通过正确配置日志记录并重新启动Tomcat解决了依赖关系的问题。 – Laowai 2013-05-03 06:11:07