5

我们正在开发一个基于 OSGi 的基础架构,用于处理基于流的数据流。特定的处理任务由各个 OSGi 组件执行。我们现在需要能够将这些组件分布在不同的机器上,这意味着我们需要某种 OSGi 组件/容器之间的通信机制。

在我的研究中,我遇到了不同的潜在解决方案:R-OSGi、用于分布式 OSGi 的 Apache CXF、Eclipse 通信框架。

ECF 似乎特别有趣,因为它支持不同的传输格式并提供对服务发现等内容的支持。

我的核心问题:

  • 是否有在 Felix 中设置 ECF 基础架构的详细教程/演练?(根据我的研究,我发现最近添加了对 Felix 的支持)
  • 除了上面列出的三个我可能错过的解决方案之外,还有其他解决方案吗?
  • 是否有理由使用 Apache CXF 而不是 ECF?
4

1 回答 1

2

第一个问题——是否有关于使用 Felix 设置 ECF 的详细演练——我不知道答案,尽管可能会使用搜索引擎来找出这些术语的组合。

问题是 ECF 使用 Equinox 基础设施,并且有时不经意地依赖于通过传递依赖项(尤其是使用 Equinox 进行非公共调试的运行时 API)的非公共包。反过来,这意味着 ECF 依赖于一整套可用的其他组件,而正是这个集合通常在 Felix 运行时没有很好地定义。

您错过了 Paremus 的 Service Fabric,它是一个商业 OSGi 云解决方案。我不确定您是否特别关注开源;但是,如果您包含商业许可证,那么它们具有非常强大的远程服务架构。

最后,Apache CXF over ECF 问题——如果您使用的是 Felix,我认为使用 Apache CXF 可能比使用 ECF 更容易。这主要是由于依赖集及其工作,再加上 ECF 可能未在 Felix 上测试,因此可能会假设 Equinox 运行时的特定方面(例如,包括运行时的父类加载器委托来获取引导类路径上的东西)。这实际上并不是 ECF 本身的错,而是 Eclipse 生态系统如何工作的产物。

如果您想与非 OSGi 运行时进行通信,Apache CXF 的优势在于它们可以生成 WDSL 以与其他语言进行交互。我相信您可以通过更多的工作在 ECF 中做同样的事情。CXF 解决方案可能比相应的 ECF 解决方案更冗长(WSDL 总是如此),但如果您不使用大量请求,这不太可能产生显着差异。

于 2012-10-22T09:04:42.313 回答