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 如何互相受益?这是如何构造的? 的相关文章

  • 注册服务并寻找服务

    我是 OSGI 新手 我想了解如何注册服务 总是通过吗BundleContext对象在Activator 有没有其他可用的方法 假设我有一个界面IService并且有两个实现ServiceImpl1 and ServiceImpl2在同一个
  • WebLogic 和 OSGi

    有没有办法在 Weblogic 应用程序服务器中运行 OSGi 容器 我知道它可以与 JBoss Glassfish 配合使用 并且可以将 Equinox servlet 桥添加到您的 OSGi 项目中 桥的实现太旧了 但我想要类似 JBo
  • 将 JSP 包含到 sling servlet 中

    我目前正在开发一个小项目 试图帮助某人弄清楚如何连接组件 理想情况下我们想做两件事 有一个呈现模板的 jsp 我们所有的业务登录都在 SlingAllMethodServlet 中 servlet 定义要点 package definiti
  • Scala.2.10.1 的标准库还是 Akka?

    我要使用Futures and Promises from scala concurrentScala 中的包2 10 1 我应该使用Akka反而 Akka future 和 Promise 在 2 10 中被移入 Scala 标准库 所以
  • 无法通过 JNDI 查找 OSGI 服务

    我正在使用 JBossAS7 我的应用程序有一些 OSGI 模块和大型非 OSGI 部分 我尝试通过 JNDI 在非 osgi 子系统中查找 osgi 服务 但它们不存在于 JNDI 上下文中 我发现类似的问题JBOSS 7 JNDI 树中
  • akka 远程处理中出现“最大允许大小 128000 字节,编码类 scala 的实际大小”错误

    我想使用 Akka Remoting 在参与者之间通过网络交换消息 但是对于大型字符串消息 我收到以下错误 akka remote OversizedPayloadException Discarding oversized payload
  • Akka HTTP 连接池在几个小时后挂起

    我有一个 HTTP 连接池 在运行几个小时后挂起 private def createHttpPool host String SourceQueue HttpRequest Promise HttpResponse val pool Ht
  • Akka、SQS 和 Camel 的消费者投票率

    我正在做的一个项目需要从SQS读取消息 我决定使用Akka来分布式处理这些消息 由于 Camel 支持 SQS 并且在 Consumer 类中内置了 Akka 中使用的功能 因此我认为最好以这种方式实现端点并读取消息 尽管我还没有看到很多人
  • Akka Testkit 错误且版本不明确

    我正在使用 Akka testkit 库来测试我的一些演员 这是我的 build sbt 中的内容 com typesafe akka akka testkit 2 6 10 Test 这是我得到的错误 java lang IllegalS
  • 如何使 scalatest 与 Spraytestkit 和 HttpServiceActor 一起工作

    我在看Spray 1 3 1 测试套件文档 http spray io documentation 1 2 1 spray testkit 但找不到下面我需要的正确示例 我有这个样本spray 1 3 1 service trait MyS
  • 在 Akka 中配置嵌套 Router

    我有一些嵌套的路由器 应创建它FromConfig 我想要的是这样的 test akka actor deployment worker router round robin nr of instances 5 slave router b
  • 如何为 Apache POI 3.8 创建工作 OSGI 包?

    我的目标是创建 Excel 2007 文档 XLSX 在 Eclipse RCP 环境中 Excel 2003 很简单 我不想将 POI jar 放在 lib 文件夹中 相反 我想使用目标定义中的工作 POI OSGI 包 到目前为止我所有
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • Akka/Scala:映射 Future 与 pipelineTo

    In Akka参与者 在发送一个Future结果给另一个演员 A 映射Future发挥作用tell结果给演员 B 定义一个onSuccess未来的回调 其中tell结果给演员 C 管道Future结果给演员pipeTo 其中一些选项已在上一
  • akka-http:找不到参数解组的隐式值

    我的 Spray json 支持看起来像这样 object MarshallingSupport extends SprayJsonSupport implicit def json4sFormats Formats DefaultForm
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • OSGi:将参数传递给特定包

    我有一个带有自定义 Main 类的自定义 jar 它启动 OSGi 框架并安装 启动捆绑包 这个主 jar 还包括一个属性文件 目标 我有一个包 A 它应该以某种方式获取主 jar 的该属性文件的属性 我的第一次尝试是在捆绑包 A 中定义一
  • 为什么对 CQ 中的每个服务使用 @Component 注解

    我对以下事情有点困惑 我明白 Service and Component注解是我们在OSGi中定义组件或服务时的主要 注解 我指的是http felix apache org documentation subprojects apache
  • Java / Scala Future 由回调驱动

    简洁版本 我怎样才能创建一个Promise

随机推荐

  • 运行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