加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 建筑模块化Akka系统

发布时间:2020-12-16 09:09:59 所属栏目:安全 来源:网络整理
导读:我们正在建立一个基于多组件Akka的群集系统.每个组件都是单独的Play!项目,并开始它加入Akka集群和组件开始查找演员工作. 问题 这个设置有两个问题: 写测试代码非常困难(我们还没有弄清楚),特别是在编写依赖于来自不同组件的多个参与者的测试时.我们如何解
我们正在建立一个基于多组件Akka的群集系统.每个组件都是单独的Play!项目,并开始它加入Akka集群和组件开始查找演员工作.

问题

这个设置有两个问题:

>写测试代码非常困难(我们还没有弄清楚),特别是在编写依赖于来自不同组件的多个参与者的测试时.我们如何解决依赖关系并在测试代码中创建一个正确的集群(两个播放应用之间!)
>在开发过程中,每个开发人员都必须启动多个Sbt实例来引导系统(不同的播放项目),这样可以让整个系统的内存和开发变得难以置信.

我在找什么

我正在考虑使用集群“角色”属性进行选择性启动,这意味着只有一个Play项目和组件(模块)和启动的项目我将扫描当前的“角色”属性的这个实例,并基于我启动或停止某些组件/演员.

这将使测试变得更容易,但是我不清楚在Play中如何做到这一点,特别是某些组件实际上提供了RESTful API(播放控制器),而且我不知道如何启用/禁用路由和控制器的启动时间玩.

是否有任何文件或东西显示正确的方式来构建模块化分布式系统或任何线索? (还有什么与SBT如何设置有关?

编辑1:该项目居住在单个存储库中,并具有单个sbt构建(多个项目)

解决方法

这是一个很好的问题,尽管我不是Play专家,但我会尽可能的回答这个问题.

1 – 写作测试

我建议隔离测试模块,以避免必要的测试用例的指数爆炸.为此,演员是一个非常好的抽象,因为您可以通过注入TestProbe而不是真正的ActorRef轻轻地嘲笑任何演员.在集群中,您通常会在其他节点上查找服务,这意味着在测试中,构建探测器并注入其路径(probe.ref.path),而不是您将在生产系统中查找的路径.

第二个方面涉及您希望多个服务参与的集成测试.在这种情况下,您不需要启动涉及多个JVM的“正确”集群,您可以在测试中启动多个ActorSystem并让它们在“localhost”上进行通信.

2 – 开发部署

不需要运行多个sbt实例,只需创建一个合适的Main类,即在同一进程中启动所有必需的ActorSystem,就像上面提到的测试一样.

3 – 节点角色管理

由Play管理的ActorSystem通常将具有“前端”角色.除此之外,您可以启动更多具有不同角色的系统,而不是自己播放应用程序.触发不同的行为 – 启动不同的服务和启动不同的活动 – 根据节点的作用是有意义的,我们自己在测试和实际应用中.

关于某些路由禁用某些角色的问题,我不太清楚,不能回答.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读