0

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

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

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

app1 中接收网络请求的路由:

<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>

由于我是 Apache Camel 的新手,因此根本原因很可能非常简单。任何帮助将不胜感激。

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

4

1 回答 1

1

vm 组件在同一个类加载器中工作,例如我们在 vm 文档页面上所说的:http: //camel.apache.org/vm.html

此组件与 SEDA 组件的不同之处在于 VM 支持跨 CamelContext 实例的通信 - 因此您可以使用此机制跨 Web 应用程序进行通信(假设 camel-core.jar 在系统/引导类路径上)。

因此,如果您使用 Apache Tomcat,则需要将 camel-core JAR 作为共享 JAR。比如在引导类路径的某处。

于 2013-04-30T14:32:43.140 回答