Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OSGi和Akka如何从彼此中获益?这是如何组织的?_Osgi_Akka - Fatal编程技术网

OSGi和Akka如何从彼此中获益?这是如何组织的?

OSGi和Akka如何从彼此中获益?这是如何组织的?,osgi,akka,Osgi,Akka,在我提出使用OSGi或Akka的问题之后,有人建议我将两者结合使用,并且它们各自解决不同的问题。我可以使用OSGi提供模块化和可更新性,使用Akka提供可伸缩性和性能。由于结合OSGi和Akka的实验并不多,我仍然有几个问题 OSGi和Akka如何一起使用并相互受益?这是如何组织的?您的所有参与者是否都驻留在一个OSGi捆绑包中,是否每个人都有一个单独的捆绑包,是否有一个混合解决方案,或者是否真的有一种“正确”的方法来实现 我会将大型组件划分为不同的OSGi捆绑包。每个捆绑都有不同的Akka参与

在我提出使用OSGiAkka的问题之后,有人建议我将两者结合使用,并且它们各自解决不同的问题。我可以使用OSGi提供模块化和可更新性,使用Akka提供可伸缩性和性能。由于结合OSGi和Akka的实验并不多,我仍然有几个问题

OSGi和Akka如何一起使用并相互受益?这是如何组织的?您的所有参与者是否都驻留在一个OSGi捆绑包中,是否每个人都有一个单独的捆绑包,是否有一个混合解决方案,或者是否真的有一种“正确”的方法来实现

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

编辑

实施后的想法:
它们显然是相辅相成的!我将应用程序划分为几个大块,然后使用Spring将它们注入到应用程序的各个部分中。在大街区里,我只用阿克卡。通往街区的大门是打字演员。为了使我的系统完全异步,我必须实现一些额外的功能。因此,所有接口方法都应返回void类型。找不到别的办法。然后,您可以通过接口将消息作为一个属性传递,该属性在整个请求过程中一直存在,并在请求开始时注册到“Responder”中。最后,成功返回一个delferredResult对象或返回一个错误/超时。

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

这样想吧

面向对象编程引入了新的封装层。在对象级别(使用私有成员)。OSGi只支持JAR级别的封装。如果没有OSGi,一旦它被编译,它就会融进一个锅中。OSGi在JAR级别强制执行接口。正因为如此,您拥有更干净的模块性和更好的代码(出于同样的原因,任何类型的封装都是好的)

我只使用OSGi进行JAR级别的封装。任何重叠的特性,例如根据使用情况扩展某些模块,我在Akka中会这样做,因为API级别更高,因此更易于操作和维护

但是,关于它们的许多事情并没有重叠,所以你应该能够很容易地看到它们的发展方向,记住这条经验法则

OSGi对我来说非常有用,因为它有我如何使用服务的规则。。。在JAR级别强制执行接口

我认为你的最后一段解释得很好。只需将其模块化,就像任何大型软件一样。但现在它们是OSGi捆绑包

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

编辑:对评论的回应

阅读你的问题,你似乎知道一些我不知道的事情。我不能确定,所以如果这篇文章没有达到目的,请告诉我。我是一个阿克卡人,后来做了一些OSGi,如果你用另一种方式做的话,你可能会意识到我没有的选择

共享参与者系统是微不足道的。OSGi捆绑包不像框架那样导致控制反转。您可以像调用其他库代码一样调用它

无论您在何处创建actor,都会使用system.actorOf调用另一个包中的actor类,就是这样。您的问题似乎暗示您对其他OSGi选项了解得更多,或者您可能认为OSGi将执行控制反转,因此每个捆绑包都将使用自己的actor系统


如果还不清楚,我推荐一个快速原型。只需通过使用该设计的第一个端到端测试,然后在OSGi中添加重构。

感谢您的解释。OSGi和Akka之间的合作是否普遍?我在最后一段中的解决方案是否是构建此结构的常用方法,以及是否有时使用其他结构?我不确定它是否通用。但是,如果它已经完成但没有听说过,我也不会感到惊讶,因为它们都是非常常见的工具。。。在大多数情况下,它们是相互正交的。所以,这不是一个真正的组合,会出现在对话中。将OSGi与Akka结合使用的方式与对任何代码的使用方式相同。我没有遇到过任何情况,我需要对Akka执行的操作与常规同步代码不同。因此,您在一本关于OSGi的好书中找到的建议,如OSGi in action,应该是有效的。阿克卡也一样。它们基本上是相互正交的。举一个例子(如果github过于复杂,可能会在github上),说明ActorSystem如何在多个bundle之间共享是很有用的。我设想通过ActorSystem和其他捆绑包提供服务的某些捆绑包能够引用它们(通过ActorSystem的同一个实例)向其他捆绑包中定义的参与者发送消息。这已经有一段时间了,但为了帮助任何人回答这个问题。可以找到一个代码示例,解释它是如何结合在一起的嗨,亚瑟,我也在研究这个主题。你能分享11月13日以来的经历吗(例如你的论文)?这将是伟大的。我很高兴看到其他人尝试做同样的事情我。我很好奇你的申请是否公开。我想看看你是怎么解决一切的。如果可以的话,请在源代码的链接上发表评论。我最终将Spring与Akka结合使用。这真是太好了。我在Scala中的Akka中有完整的模块,客户端的接口是Java中的一个简单的SpringMVC。请参阅我的“编辑”;)。该代码不可用,因为它受NDA保护。