【问题标题】:access the camel context from a different fuse bundle从不同的保险丝包访问骆驼上下文
【发布时间】:2014-06-10 02:16:09
【问题描述】:

我有几个不同的保险丝包,其中一些在他们自己的骆驼上下文中定义了骆驼路线。

我想从单个包中访问所有骆驼上下文。

类似:

fuse.getCamelContext("someOtherCamelContextId")

或者也许:

fuse.getBundleContext("someOtherBundleName").getCamelContext("someOtherCamelContextId")

我知道如何实现 CamelContextAware 类并使用 spring 注入它,但是,它只能访问本地骆驼上下文。

Fuse 会记录骆驼上下文的服务 ID - 有没有办法查找它们?

或者 Fuse 是否只允许访问该捆绑包的捆绑服务?

谢谢!

【问题讨论】:

  • 好吧,这里有一个解决方案,虽然它需要大量的 reflection 才能让它工作!我可以将 blueprintContainer 注入到一个对象中,然后在调试时我可以从那里找到其他包 camelContext。 blueprintContainer.registration.m_registry.m_regsMap[""].value[].m_ref 注册是 BlueprintContainerImpl 类的私有字段 - 所以我将尝试使用反射来解决这个问题,并将相应地在此处更新
  • 你能解释在差异包中访问其他骆驼上下文的原因吗?我希望 NMR 端点可以用于包间通信,如果您只需要通过这些包处理的数据,那么您可以使用 NMR 端点并从其他包中检索处理过的数据。
  • 我们有一个通用组件,用于写入 activeMQ 端点。在写入该端点时,我需要该通用组件来注意其他上下文(特别是拦截)中的骆驼路线。所以我需要将通用组件更改为通过骆驼上下文编写。
  • 我想你仍然可以使用一个带有 NMR 端点的通用包,它将写入活动的 mq。您可以将该捆绑包称为进出模式并用于调用其他捆绑包。在另一个捆绑包中,您可以拥有尽可能多的路线,并且您只能为此目的使用一条路线。通过此链接转到:camel.apache.org/nmr.html

标签: spring apache-camel fuseesb


【解决方案1】:

这里有一个例子!

ServiceReference[] srs = bundleContext.getServiceReferences(CamelContext.class.getName(), "(camel.context.name=myother-camel-context-name)");
CamelContext camelContext = (CamelContext) bundleContext.getService(srs[0])

真的很简单……

【讨论】:

【解决方案2】:

CamelContext 已注册到 OSGi 服务注册表中。所以只需使用它来查找CamelContexts,例如它的标准 OSGi 如何做到这一点。

【讨论】:

  • 感谢您的回答,克劳斯,我认为应该这么简单,但我感到困惑......您的回答帮助我指明了正确的方向!
猜你喜欢
  • 2017-08-29
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多