Apache Camel和Blueprint,如何在另一个捆绑包中找到一条路线?

时间:2018-07-24 02:36:34

标签: java apache-camel osgi blueprint-osgi

我第一次与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>

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

有两种方法可以执行此操作。我要列出几对,将不可能列出您可以执行此操作的所有方式。

  1. direct-vm组件提供对 同步 的直接调用 JVM实例中的所有使用者。此端点可用于连接 骆驼上下文 中的现有路线,以及 other 同一JVM中的骆驼上下文

  2. vm组件提供 异步 JVM实例中的所有使用者。与seda组件类似,区别在于可以 在骆驼上下文之间进行通信 。但是,像上面一样,它们必须全部在 同一JVM 中。

因此,如果捆绑包都在同一jvm上运行,则可以使用direct-vm,并且可以使用vm组件。

要处理在不同VM上运行的捆绑软件,您可以使用多个组件,例如以下列表:

  • 将JMS消息发送到分发包。使用JMS将交换机传输到另一端。
  • 使用SOAP时,您可以使用XSLT转换XML并发送给另一个托管Web服务的捆绑软件。使用CXF来传输交换。
  • 使用REST服务。让您捆绑侦听并响应JSON对象。
  • 也可以使用
  • MQTT。当处理在树莓派上运行的骆驼束时,这可能会很有用。

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