【问题标题】:Apache Camel VM queue between servletsservlet 之间的 Apache Camel VM 队列
【发布时间】:2013-04-30 06:19:58
【问题描述】:

我正在尝试在两个 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中接收到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>

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

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

【问题讨论】:

    标签: apache-camel endpoint


    【解决方案1】:

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

    此组件与 SEDA 组件的不同之处在于 VM 支持 跨 CamelContext 实例的通信 - 所以你可以使用它 跨 Web 应用程序通信的机制(前提是 camel-core.jar 位于系统/引导类路径中)。

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

    【讨论】:

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