有没有办法在 akka 应用程序中使用扩展 Actor 类 的任意实现方法?
Is there a way to use arbitary implemented methods of extended Actor classes in an akka app?
在我的情况下,我有一个 Actor class(例如 Greeter)和我想在应用程序中使用的 sendSecureMessage
方法。问题是在创建迎宾演员后,ActorSystem 只为我提供了 ActorRef
对 Greeter
的引用,而我不能将 sendSecureMessage
与该引用一起使用。
有什么方法可以调用这个函数吗?
def sendSecureMessage(sender: ActorRef,receiver: ActorRef, message: Any, automata: Automata):
就是class Greeter(message: String, printerActor: ActorRef) extends Actor
中的方法
这就是我创建演员的方式:
val firstActor: ActorRef =
system.actorOf(Greeter.props("first",printer).withDispatcher("custom-dispatcher"),"firstActor")
Actor 与任何“public”访问隔离,只能通过消息使用。这就是为什么在创建 actor 时只得到一个 ActorRef
的原因。
在不访问任何内部参与者字段的情况下,您仍然可以共享方法 sendSecureMessage
的代码,例如 context
。
您可以如下所示将方法 sendSecureMessage
提取到 Greeter
的伴生对象中,并从其他地方使用此方法而无需 ActorRef
.
object Greeter {
def sendSecureMessage(sender: ActorRef, receiver: ActorRef, message: Any, automata: Automata)
}
如果方法确实访问内部 actor fields/data,您应该引入调用此方法的消息。
这里有两个选项。
如果 sendSecureMessage
是一个不使用 actor 状态的“静态”方法,则将它放在 actor 的伴随对象中并从那里直接调用它。
如果 sendSecureMessage
确实使用了 actor 状态,那么调用它的唯一安全方法是向 actor 发送带有参数的消息,让 actor 调用该方法,然后将结果作为回复发回.如果您允许代码从不同线程调用 actor 上的方法,那么所有同步保证都会超出 window.
在我的情况下,我有一个 Actor class(例如 Greeter)和我想在应用程序中使用的 sendSecureMessage
方法。问题是在创建迎宾演员后,ActorSystem 只为我提供了 ActorRef
对 Greeter
的引用,而我不能将 sendSecureMessage
与该引用一起使用。
有什么方法可以调用这个函数吗?
def sendSecureMessage(sender: ActorRef,receiver: ActorRef, message: Any, automata: Automata):
就是class Greeter(message: String, printerActor: ActorRef) extends Actor
这就是我创建演员的方式:
val firstActor: ActorRef =
system.actorOf(Greeter.props("first",printer).withDispatcher("custom-dispatcher"),"firstActor")
Actor 与任何“public”访问隔离,只能通过消息使用。这就是为什么在创建 actor 时只得到一个 ActorRef
的原因。
在不访问任何内部参与者字段的情况下,您仍然可以共享方法 sendSecureMessage
的代码,例如 context
。
您可以如下所示将方法 sendSecureMessage
提取到 Greeter
的伴生对象中,并从其他地方使用此方法而无需 ActorRef
.
object Greeter {
def sendSecureMessage(sender: ActorRef, receiver: ActorRef, message: Any, automata: Automata)
}
如果方法确实访问内部 actor fields/data,您应该引入调用此方法的消息。
这里有两个选项。
如果 sendSecureMessage
是一个不使用 actor 状态的“静态”方法,则将它放在 actor 的伴随对象中并从那里直接调用它。
如果 sendSecureMessage
确实使用了 actor 状态,那么调用它的唯一安全方法是向 actor 发送带有参数的消息,让 actor 调用该方法,然后将结果作为回复发回.如果您允许代码从不同线程调用 actor 上的方法,那么所有同步保证都会超出 window.