当前位置: 首页 > 知识库问答 >
问题:

Servicemix/Camel:如何利用OSGI创建“可插拔”捆绑包?

支智志
2023-03-14

场景:我将尝试与EIP手册中的贷款经纪人示例进行类比

  1. 客户发送报价请求
  2. (贷款经纪人向信贷局索取客户信用评分)
  3. 贷款经纪人向每家银行发送报价请求

问题

  • 在我的例子中,点1和2处于相同的骆驼上下文(或osgi束)
  • 每个银行都有一个单独的捆绑包,通过核磁共振将endpoint暴露给贷款经纪人捆绑包
  • 贷款经纪捆绑包不知道银行的事先,因为我们不断与新的银行合作,然后

我做过的事

  • 创建了一个注册表类,并在loan-broke-bundle中创建了一个bank描述符接口
  • 每个银行捆绑包在启动时调用注册来添加它的bank描述符(Spring初始化),该描述符告诉贷款经纪人调用哪个endpoint来获取报价。
  • loan-broke-bundle主路由使用的是接收者列表(处理器通过询问注册设置目标endpoint)来路由引用请求

这个问题

希望我的描述足够清晰,您可以看到这是一个非常简单的实现。它的极限是什么?如何将此注册转换为osgi服务?

共有2个答案

田嘉澍
2023-03-14

在OSGi中,有一个很好的注册表供您使用:OSGi服务注册表。所以我的建议是稍微改变一下。为报价请求定义服务接口,并将其存储在api包中。然后让每家银行实现这个接口,并将实现发布为OSGi服务。

然后,loan broker捆绑包可以列出OSGi服务注册表中的所有OSGi服务,并调用每个服务来获取报价。在blueprint中,有一个很好的标记,可以用来将列表注入到list的bean属性中。Spring DM可能也有类似的功能。

Camel目前没有办法调用某一类型的所有OSGi服务。我们讨论了一个能够做到这一点的新的osgi服务组件。所以我们可能很快就会有解决办法

聂涛
2023-03-14

我为客户开发了一个基于SpringDM的解决方案。有一个完整的写如何做到这一点在http://www.jakubkorab.net/2012/05/system-integrations-as-plugins-using-camel-and-servicemix.html与完整的源代码可在https://github.com/FuseByExample/smx-application-plugins

希望这有所帮助。

 类似资料:
  • 问题内容: 如何从jar库创建OSGi捆绑包? 问题答案: 如果您使用的是eclipse:有一个向导。 它允许您选择许多jar库,并创建一个包含这些jar的插件项目(即OSGi捆绑包)。 你可以在这里找到它:

  • 我还不是一个有经验的OSGi用户,因此我会遇到一些问题。 我正在尝试使用作为外部提供程序,因为我不希望我的包包含所有这些类。 但是,当我运行这组包(my和)时,我得到以下错误: 错误:Bundle org.apache.serviceMix.bundles.hadoop-client[56]错误启动文件:bundles/org.apache.serviceMix.bundles.hadoop-cl

  • 我正在开发超文本传输协议客户端应用程序作为一个OSGI捆绑项目,我已经使用apache maven创建项目文件夹结构使用下面的命令。 上面的命令创建了项目文件夹结构,因为我使用的是基于httpclient的应用程序。我在pom中添加了依赖项。xml如下所示。 我执行以下命令, 根项目上进行构建 它在本地maven存储库中创建了所需的jar文件。 问题从这里开始。我试图在ApacheServiceM

  • 问题内容: 我想创建一个可以分为多个模块的应用程序,它们各自具有路由功能。用户可以从应用程序主模块打开和关闭这些模块。 我是否必须加载所有模块并根据用户是否已订阅禁用该模块。我认为这会减慢应用程序的加载,因为加载了所有模块代码并在应用程序引导时注入。 还有其他替代方法可以解决此问题吗? 问题答案: 应该为主要模块提供已启用模块的列表: 显然,无法正常加载array ,因为此时应用程序尚未启动。XH

  • 我正在尝试构建OSGi捆绑包,用于Equinox和Felix。我的一些捆绑包使用javax。*包,例如javax。网 JRE提供了这个包,没有问题,它可以在两个框架中工作。 Felix要求我在清单中导入该包。MF: 这是有道理的,因为只有java。*包应该隐式包含。出于某种原因,无论哪种方式,春分都很好,它似乎神奇地找到了它们。 当我和第谷一起建造时,我的问题就来了。当我添加导入包时,第谷构建失败

  • 我正在将我的spring-java项目转移到OSGi。 我有一些依赖项,这些依赖项在spring ebr repo或maven repo中不能作为包提供。处理它们的最佳方法是什么? null