我有一个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 的范围。