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

时间:2012-06-28 18:11:39

标签: apache-camel apache-servicemix

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

  1. 客户发送报价请求
  2. (贷款经纪人要求信用局提供客户信用评分)
  3. 贷款经纪人向每家银行发送报价请求。
  4. 问题

    • 在我的情况下,第1点和第2点处于相同的驼峰上下文(或osgi包)
    • 每个银行都有一个单独的捆绑包,通过NMR
    • 将端点暴露给贷款经纪人捆绑包
    • loan-broker-bundle事先不知道银行,因为我们时不时地与新银行合作

    我做了什么

    • 在loan-broker-bundle
    • 中创建了一个注册表类和bankDescriptor接口
    • 每个银行捆绑包在启动时都会调用注册表来添加其bankDescriptor(spring init),告诉贷款经纪人要调用什么端点来获取报价。
    • loan-broker-bundle主路由使用recipientList(处理器通过询问注册表设置目标端点)来路由引用请求

    问题

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

2 个答案:

答案 0 :(得分:4)

我为客户开发了一个基于SpringDM的解决方案。在http://www.jakubkorab.net/2012/05/system-integrations-as-plugins-using-camel-and-servicemix.html完整写了如何执行此操作,并在https://github.com/FuseByExample/smx-application-plugins提供了完整的源代码

希望有所帮助。

答案 1 :(得分:2)

在OSGi中,您可以使用一个很棒的注册表:OSGi服务注册表。所以我的建议是略有不同。为引用请求定义服务接口并将其存储在api包中。然后让每个银行实现此接口并将实现发布为OSGi服务。

贷款经纪人捆绑包然后可以列出OSGi服务注册表中的所有OSGi服务,并调用每个服务以获取报价。在蓝图中有一个很好的标记,您可以使用它将列表注入List的bean属性。 Spring DM也许有类似的东西。

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