Akka 在生成期间键入发送消息

Posted

技术标签:

【中文标题】Akka 在生成期间键入发送消息【英文标题】:Akka typed sending messages during spawning 【发布时间】:2021-06-17 17:23:47 【问题描述】:

这个问题不言自明。

目前我的 webapp 正在启动时创建演员系统,并使用SpawnProtocol 生成一些***演员。此外,启动还可以在启动期间向这些参与者发送一些消息。

创建***actor时,akka返回一个CompletionStage,等待actor被创建。

对于这种在角色生成期间接受消息的场景,最好的设计模式是什么?我应该让启动等待角色生成完成,还是隐藏发送的消息并让线程继续?如果要隐藏,请发送一些线程安全且高性能的示例隐藏技术

请注意,我在我的应用程序中使用的是 akka-typed、java 和 spring

【问题讨论】:

【参考方案1】:

基本想法是使用CompletionStage API 链接调用以引导您的应用程序。

CompletionStage<ActorRef<Stuff>> actorRefPromise = spawnActorRef();

actorRefPromise.thenApply(actorRef -> bootStrapApp(actorRef))

由于您对引导并不太具体,我假设您需要一个 ActorRef 来引导您的应用程序。在上面的 sn-p spawnActorRef() 中调用 SpawnProtocol 并返回 ActorRefCompletionStage,然后您可以使用 thenApply 链接一个动作,一旦该 ref 可用并使用它传递给其余的您的引导代码。

【讨论】:

我在 tomcat 服务器上使用 spring webapp。 spring 应用程序创建actorSystem,然后各个spring bean 使用SpawnProtocol 创建actor。我正在寻找的是一种让各个spring bean演员接收消息并缓存它们以在actorRef未来完成时发送的方法。 那些 Spring bean 从哪里获取消息以进行缓存?来自网络电话?他们是服务吗?在http请求处理过程中会发生吗? 应用程序内的预定触发器是我感兴趣的关键部分。但它们也由网络调用触发 调用spawnActorRef().toCompletableFuture().join() 来阻止actor 创建然后将消息传递给它怎么样? 是的,也可以。我在问最好的设计模式是什么?我不太热衷于将块放入应用程序,但还没有找到其他方法

以上是关于Akka 在生成期间键入发送消息的主要内容,如果未能解决你的问题,请参考以下文章

Akka源码分析-Persistence-AtLeastOnceDelivery

键入网址到网页显示,期间发生了什么?

akka websocket 消息大小限制

Akka(15): 持久化模式:AtLeastOnceDelivery-消息保证送达模式

AkkaAkka 传递消息

Akka actor 可以参与 XA 交易吗?