【问题标题】:Apache Camel and Blueprint, how to hit a route within another bundle?Apache Camel 和 Blueprint,如何在另一个捆绑包中找到一条路线?
【发布时间】:2018-12-31 13:08:09
【问题描述】:

我是第一次使用 Apache Camel,我非常喜欢它。

我的问题是,我想打一条存在于不同捆绑包中的路线。我想知道这到底是怎么可能的。

我已经(从我的服务中)调用了到达骆驼路线的调用。在该路由中调用一个 URL。 URL 是另一条路线,类似于.. direct://

我得到以下信息:

org.apache.camel.component.direct.DirectConsumerNotAvailableException: No consumers available on endpoint: direct://

我正在做这样的事情:

<bean id="myBeanID" class="ClassWhereRouteIsDefined"/>
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
    <route>
        <from uri="direct://fromURL" />
        <to uri="direct://toURL" />
    </route>
</camelContext>

有没有办法做到这一点?

【问题讨论】:

  • 确保您正在交换的 body 的类可以被两个包看到(例如,从第三个包或 java 标准类导出)

标签: java apache-camel osgi blueprint-osgi


【解决方案1】:

有几种方法可以做到这一点。我将列出一些不可能列出所有可以做到这一点的方法。

  1. direct-vm 组件提供直接、同步调用 JVM 实例中的任何消费者。此端点可用于连接 相同骆驼环境中的现有路线,以及来自其他 同一 JVM 中的骆驼上下文

  2. vm 组件提供 异步 调用 JVM 实例中的任何消费者。它类似于 seda 组件,不同之处在于可以在骆驼上下文之间进行通信。然而,就像上面一样,它们必须都在同一个 JVM 中。

因此,如果您的捆绑包都在同一个 jvm direct-vm 上运行,那么您可以使用 vm 组件。

要处理在不同 VM 上运行的捆绑包,您可以使用如下列表所示的大量组件:

  • 将 JMS 消息发送到包。使用 JMS 将交换传输到另一端。
  • 使用 SOAP 时,您可以使用 XSLT 转换 XML 并发送到另一个托管 Web 服务的包。使用 CXF 传输交换。
  • 使用 REST 服务。让您捆绑侦听和响应 JSON 对象。
  • 也可以使用MQTT。这在处理在 Raspberry pie 上运行的 Camel 包时非常有用。

服务器间包通信的主要思想是,您可以创建侦听协议并将交换和标头转换为该协议的包,然后继续。

【讨论】:

  • 你有好的代码示例吗?例如,bundle 1 进行查找以获取动态命中的路由。假设它返回direct://routeX。我正在调用 .toD(routeX),但不确定如何在我的其他包中公开路由 X。我认为它需要以某种方式在相同的骆驼上下文下公开,但它在不同的捆绑包中?编辑:这可能会起作用,因为它在同一个 JVM 下?
  • 如果您调用的路由是.toD(direct://routeX),则您使用的是直接组件。这将只允许您在相同的骆驼上下文中调用路由,并且该路由将以from(direct://routeX) 开头。尝试使用 direct-vm 或像 .toD(direct-vm://routeX) 这样的 vm 并在另一个骆驼上下文中使用 from(direct-vm://routeX) 启动路由。在这种情况下,直接将不起作用。尝试使用 direct 和 seda 以及一个 camel-context 的 styart,然后用 direct-vm 和 vm 替换它们。
  • @JohnLippson 你不能跨包共享骆驼上下文。
  • 甜蜜。现在尝试直接虚拟机
  • 顺便说一句,只是调用 from(...).bean(this, "mymethod") 足以在另一个上下文中启动路由,然后只是创建一个路由存在于蓝图中的 bean?运行 camel:endpoint-list 未显示我的 routeX 已注册
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2016-06-04
  • 2017-05-04
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 2015-03-17
相关资源
最近更新 更多