OSGi 和 Akka 如何互相受益?这是如何构造的?

2023-12-23

跟进我的相当不合逻辑的问题 https://stackoverflow.com/questions/20122538/component-based-application-with-scalability-in-mind-osgi-or-akka,要求使用OSGiorAkka,有人建议我这两者可以一起使用,并且它们各自解决不同的问题。我可以使用 OSGi 提供模块化和可更新性,并使用 Akka 提供可扩展性和性能。由于尚未对 OSGi 和 Akka 的结合进行大量实验,所以我仍然有几个问题。

OSGi 和 Akka 如何一起使用并互相受益?这是如何构造的?您的所有参与者是否都驻留在一个 OSGi 捆绑包中,他们是否每个人都获得一个单独的捆绑包,是否有混合解决方案,或者是否确实存在一种“正确”的方法来做到这一点?

我会将大组件分成不同的 OSGi 包。每个包都存在不同的 Akka actor。然后,每个捆绑包可以根据该捆绑包上的负载彼此单独地缩放。在每个捆绑包中,可以使用透明负载平衡将负载分散到不同的参与者上。 这是正确且现实的做法吗?

EDIT

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


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

这样想吧...

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

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

但是,关于它们的许多事情并不重叠,因此您应该能够根据经验法则轻松地了解哪些内容会发生在哪里。

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

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

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

编辑:回复评论

看了你的问题,看来你可能知道一些我不知道的事情。我不能确定这一点,所以如果这篇文章没有达到目的,请告诉我。我是一个 Akka 人,后来做了一些 OSGi,如果你反过来做,你可能会知道我不知道的选项。

共享 Actor 系统很简单。 OSGi 包不会像框架那样导致控制反转。您只需像任何其他库代码一样调用它即可。

无论您在何处创建 actor,都使用 system.actorOf 调用另一个包中的 actor 的类,仅此而已。你的问题似乎暗示你对其他 OSGi 选项了解更多,或者可能认为 OSGi 会进行控制反转,因此每个包都会被其自己的参与者系统所困扰。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OSGi 和 Akka 如何互相受益?这是如何构造的? 的相关文章

随机推荐

  • 运行Qemu后只是黑屏

    我刚刚安装了 QEMU 并编译了支持 ARM 的 Linux 内核 但是当我运行下面的命令时 qemu system arm M versatilepb m 128M kernel home arit QEMU linux 3 8 4 ar
  • 在 RealityKit 中锚定多个场景

    将多个场景 来自 Reality Composer 加载到 arView 时 场景不会锚定在同一空间中 在此示例中 scene1 在应用程序启动时加载 按下按钮后 scene2就被添加到场景中 在这两个场景中 模型都放置在原点 并预计与添加
  • 无法在 WPF 中设置动画后的属性

    我使用以下代码为我的窗口设置动画 winLogin login new winLogin login Owner this login Show DoubleAnimation da new DoubleAnimation da From
  • 说服 Webpack 解释其“无法解析 'foo'” 错误

    我怎样才能说服Webpack 当它要发出时Can t resolve foo also 发出有关的信息它尝试过的地方 to find那个图书馆 错误信息Can t resolve foo 没有帮助 因为这是一条死胡同 读者不知道 Webpa
  • 仅使用 css/bootstrap 粘性多个表头 (thead) 行

    我试图在下面有多行 thead 标签被粘贴 而表格的其余部分是可滚动的 This https stackoverflow com questions 12266262 position sticky on thead 59690013 59
  • 按下主页按钮后如何在后台设置 CABasicAnimation 动画?

    我是ios开发的新手 我在我的项目中使用轮子图像 动画在前景模式下工作正常 之后我按下主页按钮 现在我重新启动应用程序 滚轮动画不起作用 这是我的代码 CABasicAnimation animation CABasicAnimation
  • 模块中子应用程序之间的 Angular2 路由

    我正在将 Angular 2 1 用于一个大型应用程序 该应用程序具有多个子模块 每个子模块定义按功能组织的子应用程序 顶层模块通过导入每个子应用程序的路由等 为 RouterModule 配置整个应用程序的所有子路由 因此 从子应用程序的
  • 如何在 LINQ to Entities 查询中实现查询拦截? (C#)

    我正在尝试在 EF4 中实现加密列 并使用 CTP5 功能来允许简单地使用 POCO 来查询数据库 抱歉 这是很多话 但我希望下面的内容足以解释需求和问题 那么 一些背景知识以及我迄今为止的进展 目的是 如果您在不使用我们的 DAL 的情况
  • Scala 解析器组合器:在流中解析

    我在 scala 中使用本机解析器组合器库 我想用它来解析许多大文件 我已经设置了组合器 但是我尝试解析的文件太大 无法一次读入内存 我希望能够通过解析器从输入文件流式传输并将其读回磁盘 这样我就不需要一次将其全部存储在内存中 我当前的系统
  • 创建一个新的 SVGTransform 对象以附加到 SVGTransformList

    我正在使用 Firefox 3 6 想在单击时向 svg 元素添加翻译 该元素已经有其他翻译 var svgs document getElementsByTagName svg svg var group svgs 0 childNode
  • 未从 lambda 函数调用 aws ses.sendEmail

    我用 node js 编写的 lambda 函数非常简单 当 dynamo 数据库中出现新条目时 将调用 Lambda 然后我想循环遍历每个条目并发送电子邮件 由于某种原因 我无法理解为什么 ses SendEmail 函数从未被调用 我将
  • 如何将 PHP 中的数据插入到 MariaDB 中?

    我熟悉 MySql 数据库 但有一个名为 MariaDB 的新数据库 我尝试从 PHP 代码插入数据但不能 那么你能帮我插入数据吗 我的服务器上的 PHP 版本是 5 4 32 MySQL 版本是 10 0 20 MariaDB cll l
  • JavaScript 拆分如何处理阿拉伯语和英语数字字符串?

    当我尝试拆分时 8635 split 然后 JavaScript 给我这个结果 0 1 8635 console log 8635 split 当我尝试拆分时 2132 split 它给了我这个不同的结果 0 2132 1 console
  • 从三个不同的表创建一个表

    我在 SQL 中有三个表 我需要将它们全部合并为一个 我需要一张表中所有表的所有字段 所有表都包含来自三个不同年份的相同字段 我写了一段代码 CREATE TABLE COL TBL TRAINING ALL YEARS AS SELECT
  • 给定角度和线上的点绘制一条线

    在我的图像中 我有一个三角形 代表箭头 该箭头定义了在同一图像中进一步搜索所考虑的方向和区域 例如 如果我有一个相对 x 轴旋转 30 度的三角形 并且它的尖端位于图像中的 250 150 处 我想找到并画一条垂直于三角形尖端的线 如下图所
  • python lxml 树,line[] 创建多行,需要单行输出

    我正在使用 lxml 使用 python 创建一个 xml 文件 我正在逐行解析文件 查找字符串 如果该字符串存在 我将创建一个子元素 我正在为 SubElement 分配一个值 该值存在于解析文件中我正在搜索的字符串之后 问题 如何将所有
  • 将 Jquery Ajax 与 PHP 结合使用

    我有用 javascript ajax 编写的代码 我喜欢将相同的代码传输到 jquery 中 这是我的 javascript Ajax 代码 function cascadeCountry value if document getEle
  • 在适用于 Linux 的 Windows 子系统上运行 JavaFX 15 应用程序时出现内部错误

    当我尝试在适用于 Linux WSL2 Ubuntu 20 04 的 Windows 子系统上运行 JavaFX 15 应用程序时 我遇到了困难 需要有关后续尝试步骤的建议 到目前为止 我已经能够在 WSL 内运行我通常在 Windows
  • 卸载并重新安装节点

    我正在我的 MacBook 上卸载并重新安装 Node 和 npm 到目前为止我已经做了 sudo rm rf usr local lib node modules npm 酿造卸载节点 酿造取消链接节点 sudo rm rf 任何和所有节
  • OSGi 和 Akka 如何互相受益?这是如何构造的?

    跟进我的相当不合逻辑的问题 https stackoverflow com questions 20122538 component based application with scalability in mind osgi or ak