Akka actor多次初始化变量导致多行



我有一个Actor初始化一个对象,然后将其保存到数据库中

MyObject myObject = new MyObject();
myObject.setProp(prop);
dao.save(myObject);

在我看到的数据库中

MyObject table
id prop 
1  prop
2  prop
3  prop
4  prop

我正在尝试解决为什么会这样,我没有在其他地方初始化这个对象。鉴于数据库列中的 id 不同,该对象看起来确实初始化了 4 次。这是因为参与者正在初始化 4 次吗?我应该如何管理这个演员?>

我通过以下方式创建演员

Props MyActorProps = Props.create(MyActor.class);
getContext().actorOf(MyActorProps).tell(...mymessage);

actorOf() 不能确保只有一个 actor 实例吗?

你的问题缺少相当多的相关代码(你在创作中使用上下文,这意味着你是一个演员,但不要告诉我们是否只有一个或父母是如何创建的,等等),但是:

在上下文或系统级别执行.actorOf()时,将创建其actorRef返回的执行组件的新实例。

您可以通过创建带有名字的演员来确保只有一个!从文档中:

name 参数是可选的,但最好命名您的参与者,因为它用于日志消息和标识参与者。名称不得为空或以 $ 开头,但它可以包含 URL 编码字符(例如,%20 表示空格)。如果给定名称已被另一个子级使用到同一父级,则会抛出 InvalidActorNameException。

以下是创建具有名称的Actor的方法:

getContext().actorOf(Props.create(MyActor.class), "myChild");

有一些像 ClusterSingleton 这样的东西可以帮助你确保只有一个实例存在,但它们超出了原版 akka-core 的范围。

最新更新