13

我一直试图在不阅读整个规范的情况下更多地了解 OSGi 的更广泛的图景。与许多事情一样,对OSGi 的实际介绍可能是由从事它工作了十年的人编写的,也许不适合将自己置于对它一无所知的人的心态中 :-)

看着 Felix 的例子DictionaryService,我真的不明白发生了什么。OSGi 是 JVM 的一个独特实例,您可以在其中加载可以相互找到的捆绑包?

显然不仅 如此,因为 StackOverflow 上的其他答案明确表明 OSGi 可以解决包含部署在不同 JVM 中的模块的分布式系统的依赖问题(加上常见问题解答一直在谈论网络)。

在后一种情况下,在一个 JVM 中运行的组件如何与单独 JVM 中的另一个组件交互?这两个组件能否像在同一个 JVM 中运行一样“使用”彼此(即通过本地方法调用),以及 OSGi 如何管理跨网络的数据编组(Serializable例如,您是否必须使用)?

或者组件作者是否必须使用其他一些不同的机制(由 OSGi 提供或自己编写)在远程组件之间进行通信?

非常感谢任何帮助!

4

9 回答 9

6

是的,OSGi 只处理在同一个虚拟机上运行的包和服务。然而,应该注意的是,OSGi 的一个独特特性是它促进了在同一个 JVM 上运行多个应用程序(以受控方式并共享公共模块)。

在访问客户端 JVM 之外的服务时,目前还没有标准化的解决方案。Paremus Infiniflow 和衍生的开源项目 Newton 使用 SCA 方法。即将发布的 4.2 版 OSGi 规范将解决问题的一方面,即如何使用通用分发软件,以便将远程服务带入客户端的 JVM。

正如有人提到 R-OSGi,这种方法还处理了问题的另一面,即如何管理分布式 OSGi 框架之间的依赖关系。由于 R-OSGi 不是通用分发软件,而是明确处理 OSGi 包的生命周期问题和依赖关系管理。

于 2009-01-15T23:30:46.743 回答
4

据我所知,OSGi 并没有开箱即用地解决这个问题。有 OSGi 捆绑包,例如Remote OSGi,它允许程序员通过网络分发服务。

于 2008-12-19T17:37:56.690 回答
3

还没有,我认为它正在为下一个版本工作。

但是一些公司已经实现了分布式osgi。我知道的是 Paremus 的 Infiniflow ( http://www.paremus.com/products/products.html )。在linkedin,他们也在努力解决这个问题。更多信息:使用 osgi 构建 Linkedin 下一代架构,这里:Matt raible:构建 Linkedin 下一代架构

以下是对 OSGI 4.2 更改的总结:关于 OSGi R4.2 草案的一些想法,有一节关于 RFC-119 处理分布式 OSGi。

于 2008-12-28T11:11:24.140 回答
2

AFAIK,包在同一个 JVM 中运行,但没有使用相同的类加载器加载(这就是为什么你可以同时使用同一个包的两个不同版本的原因)。

要与另一个 JVM 中的组件交互,您必须使用网络协议,例如 rmi。

于 2008-12-18T11:39:26.810 回答
2

OSGi 联盟正在制定分布式 OSGi 的标准:

http://www.osgi.org/download/osgi-4.2-early-draft2.pdf


这个新标准甚至有一个早期的 Apache 实现:

http://cxf.apache.org/distributed-osgi.html

于 2009-03-17T22:00:35.000 回答
1

@Patriarch24

这个问题的公认答案似乎另有说明(除非我误读了它)。此外,取自常见问题解答:

OSGi服务平台提供了在各种网络的设备上动态改变组合的功能,无需重启。

(强调我自己的)。尽管在同一个常见问题解答中将 OSGi 描述为in-VM

为什么我对此感到如此困惑?为什么一个关于十年前技术的基本问题不清楚?

于 2008-12-18T15:24:10.833 回答
1

OSGI 最初的问题更多是与代码的分配(然后是 bundle 的配置)有关,而不是与执行的分配有关。

关注分布式组件的人更倾向于 SCA

于 2009-02-19T23:10:32.297 回答
1

“介绍”链接并不是真正的介绍,它是一个常见问题解答条目。有关详细信息,请参阅http://www.osgi.org/About/WhatIsOSGi我认为不难找到。

无论如何,OSGi 是一个虚拟机内 SOA。也就是说,OSGi 框架是关于虚拟机内部发生的事情,它提供了一个框架来构建虚拟机内部的应用程序,因此您可以在很大程度上从组件构建它。所以核心与分布无关,它完全不知道谁实现了服务,它只是为模块提供了一种机制,以一种松散耦合的方式相互满足。

也就是说,µService 模型具体化了模块之间的连接,事实证明,您可以在为其他组件提供分发的框架之上构建支持。在上一个版本中,我们指定了一些机制,使其在核心中标准化,并提供可以管理分布式拓扑的特殊服务 Remote Service Admin。

于 2011-06-10T13:50:49.330 回答
0

如果您正在寻找以 OSGi 为中心的分布式云运行时 - 那么 Paremus Service Fabric ( https://docs.paremus.com/display/SF16/Introduction ) 提供了这些功能。

一个或多个系统,每个系统都由许多 OSGi 程序集(蓝图或声明式服务)组成,可以在一组 OSGi 运行时框架(Knopflerfish、Felix 或 Equinox)中动态部署和维护。

提供了一个轻量级的 RSA 远程框架,默认情况下使用 DDS(一种非常好的中间件消息传递技术)提供服务发现 - (认为可以使用 ZooKeeper 和其他方法)。当前支持的远程处理协议包括 RMI 和 Avro。

问候

理查德

于 2011-07-26T20:18:04.293 回答