Apache camel servlet之间的apachecamel虚拟机队列

Apache camel servlet之间的apachecamel虚拟机队列,apache-camel,endpoint,Apache Camel,Endpoint,我试图在两个servlet之间设置简单的VM队列测试,但没有成功。问题是请求总是超时,因为在预期的时间范围内没有响应、超时消息 “org.apache.camel.ExchangeTimedOutException:在30000毫秒内未收到OUT消息。” servlet在Tomcat中运行,并且都在部署ApacheCamel。这两个应用程序都定义了驼峰上下文和简单路由。基本设置应该很好,因为以下简单路线正在运行: <route> <from uri="servlet:///

我试图在两个servlet之间设置简单的VM队列测试,但没有成功。问题是请求总是超时,因为在预期的时间范围内没有响应、超时消息

“org.apache.camel.ExchangeTimedOutException:在30000毫秒内未收到OUT消息。”

servlet在Tomcat中运行,并且都在部署ApacheCamel。这两个应用程序都定义了驼峰上下文和简单路由。基本设置应该很好,因为以下简单路线正在运行:

<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,因为即使请求的路由没有定义(app2将丢失VM路由),也会发生相同的超时。因此,问题可能在于如何使用VM队列定义两个servlet之间的路由

如果servlet之间的路由正常,那么问题应该出在缺少/不正确的应答中。我知道接收端应该返回回复,因为来自web服务器的传入请求是inOut类型,但我不知道如何实现这一点

app1中接收web请求的路由:

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

另一端在servlet app2中:

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

//在这里测试:输出为“To”,“inOut”。。。结果总是超时
由于我是Apache Camel的新手,根本原因很可能非常简单。任何帮助都将不胜感激


问题很简单,如何在两个servlet应用程序之间设置VM队列?

VM组件在同一个类加载器中工作,例如我们在VM文档页面上所说的:

此组件与SEDA组件的不同之处在于VM支持 跨上下文实例的通信-因此您可以使用 跨web应用程序通信的机制(前提是 camel-core.jar位于系统/引导类路径上)


因此,如果您使用ApacheTomcat,您需要将camel core JAR作为共享JAR。例如在某个引导类路径中。

我完全错过了camel core JAR需要共享的部分。我现在需要弄清楚如何在不嵌入camel内核的情况下打包.war,而是使用共享内核。我会在完成所有工作后在这里更新结果。谢谢克劳斯。现在的问题是,如果我只将camel核心移动到Tomcat共享库文件夹中,servlet就会停止工作,因为显然存在一些与日志依赖项相关的类装入器冲突。如果我还将日志依赖项(来自Maven Apache camel模板的标准依赖项)移动到共享库下,则会出现另一个与类加载器相关的链接错误。我是否真的需要弄清楚哪个JAR要移动到共享文件夹,或者是否存在一些已知的包集,这些包必须使用camelcore或其他方式定位?将camel core设置为共享JAR的最佳实践是什么?通过正确配置日志记录并重新启动Tomcat,解决了依赖性问题。您好,我也有同样的问题,日志类会导致链接错误,您介意更详细地解释一下您是如何修复的吗?我不知道你说的“正确配置日志记录”是什么意思非常感谢