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
并返回 ActorRef
的 CompletionStage
,然后您可以使用 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