gpt4 book ai didi

osgi - OSGi 和 Akka 如何相互受益?这是如何构成的?

转载 作者:行者123 更新时间:2023-12-04 20:09:32 24 4
gpt4 key购买 nike

跟进我的相当illogical question , 要求使用 OSGi Akka,有人建议我两者可以一起使用,并且它们各自解决不同的问题。我可以使用 OSGi 来提供模块化和可更新性,并使用 Akka 来提供可伸缩性和性能。由于还没有很多将 OSGi 和 Akka 结合起来的实验,我还有几个问题。

OSGi 和 Akka 怎样才能一起使用并相互受益?这是如何构成的?您的所有参与者是否都驻留在一个 OSGi 包中,他们每个人是否都有一个单独的包,是否有混合解决方案,或者是否真的没有“正确”的方法来做到这一点?

我会将大组件划分为不同的 OSGi 包。每个捆绑包都存在不同的 Akka Actor 。然后可以根据该捆绑包上的负载来分别对每个捆绑包进行缩放。在每个捆绑包中,透明负载平衡可用于将负载分散到不同的参与者。
这会是正确和现实的做法吗?

编辑

实现后的想法:
它们显然是相辅相成的!我将我的应用程序分成大块,然后使用 Spring 将其注入(inject)应用程序的各个部分。在大块内我只使用 Akka。 block 的大门是类型化的 Actor 。为了使我的系统完全异步,我必须实现一些额外的功能。所以没有阻塞调用,所有接口(interface)方法都应该返回 void 类型。找不到其他方法。然后,您可以通过接口(interface)将消息作为属性传递,该属性在请求的整个过程中被携带,该属性在请求开始时注册到“响应者”中。最后,成功返回 DeferredResult 对象或返回错误/超时。

最佳答案

以下是我如何将两者结合使用。

像这样想...

面向对象编程引入了新的封装层。在对象级别(带有私有(private)成员)。 OSGi 只是启用 JAR 级别的封装。没有 OSGi,一旦编译,它就全部融为一体。 OSGi 在 JAR 级别强制执行接口(interface)。正因为如此,您拥有更清晰的模块化和更好的代码(出于同样的原因,任何类型的封装都是好的)。

我只使用 OSGi 来做 JAR 级别的封装。任何重叠的功能,例如根据使用情况扩展某些模块,我在 Akka 中做,因为 API 是更高级别的,因此更容易执行和维护。

但是,关于它们的许多事情并不重叠,因此您应该能够根据经验法则很容易地看到发生了什么。

OSGi 对我来说对于执行一个好的设计非常有用,因为它有关于我如何使用服务的规则……在 JAR 级别执行一个接口(interface)。

我想说你的最后一段解释得很好。只需像对任何大型软件一样对其进行模块化即可。但现在它们是 OSGi 包。

如果您有后续问题,请发表评论。我可以编辑说更多。我已经将两者一起使用了一段时间。

编辑:对评论的回应

阅读您的问题,似乎您可能知道一些我不知道的事情。我不能确定,所以让我知道这篇文章是否错过了它的标记。我是一个 Akka 人,后来做了一些 OSGi,如果你反过来做了,你可能知道我没有的选项。

共享 Actor 系统是微不足道的。 OSGi 包不会像框架那样引起控制反转。您只需像任何其他库代码一样调用它。

无论您在哪里创建 Actor ,都使用 system.actorOf 在另一个包中调用 Actor 的类,仅此而已。您的问题似乎暗示您对其他 OSGi 选项了解更多,或者可能正在考虑 OSGi 将进行控制反转,因此每个捆绑包都会被自己的参与者系统卡住。

如果仍然不清楚,我会推荐一个快速原型(prototype)。只需通过使用该设计的第一个端到端测试,然后在 OSGi 中进行重构。

关于osgi - OSGi 和 Akka 如何相互受益?这是如何构成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20163507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com