Akka 使用真实(非临时)发送方ActorRef在Actor启动时发送消息?
我想让一个演员在启动时发送一条消息,然后再收到回复 从Akka 使用真实(非临时)发送方ActorRef在Actor启动时发送消息?,akka,Akka,我想让一个演员在启动时发送一条消息,然后再收到回复 从preStart中发送消息会导致一个临时sender引用(因为参与者还没有开始?)。因此,答案很可能是一纸空文 任何提示都将不胜感激。如果我的前提被错误告知,我表示歉意-我是Akka的新手。一种方法是在启动前向self发送消息: 类MyActor扩展了Actor{ def preStart():单位={ 自助电话服务 } def接收={ 案例呼叫服务=> (服务?服务请求)。映射到[ServiceResponse]。管道到(自身) 案例服务响
preStart
中发送消息会导致一个临时sender
引用(因为参与者还没有开始?)。因此,答案很可能是一纸空文
任何提示都将不胜感激。如果我的前提被错误告知,我表示歉意-我是Akka的新手。一种方法是在
启动前向self
发送消息:
类MyActor扩展了Actor{
def preStart():单位={
自助电话服务
}
def接收={
案例呼叫服务=>
(服务?服务请求)。映射到[ServiceResponse]。管道到(自身)
案例服务响应=>
//对回应做点什么
}
}
如本节所述,如果您希望参与者在处理所有其他消息之前发送消息,则可以发送其他消息:
类MyActor使用Stash扩展Actor{
def preStart():单位={
自助电话服务
}
def未初始化:接收={
案例呼叫服务=>
(服务?服务请求)。映射到[ServiceResponse]。管道到(自身)
unstashAll()
context.been(已初始化)
case=>stash()//如果我们得到的是CallService以外的消息,请将其隐藏
}
def已初始化:接收={
案例服务响应=>
//对服务的响应做些什么
案例
}
def接收=未初始化
}
一种方法是在启动前向中的self
发送消息:
类MyActor扩展了Actor{
def preStart():单位={
自助电话服务
}
def接收={
案例呼叫服务=>
(服务?服务请求)。映射到[ServiceResponse]。管道到(自身)
案例服务响应=>
//对回应做点什么
}
}
如本节所述,如果您希望参与者在处理所有其他消息之前发送消息,则可以发送其他消息:
类MyActor使用Stash扩展Actor{
def preStart():单位={
自助电话服务
}
def未初始化:接收={
案例呼叫服务=>
(服务?服务请求)。映射到[ServiceResponse]。管道到(自身)
unstashAll()
context.been(已初始化)
case=>stash()//如果我们得到的是CallService以外的消息,请将其隐藏
}
def已初始化:接收={
案例服务响应=>
//对服务的响应做些什么
案例
}
def接收=未初始化
}
你的前提确实是不正确的:当预启动运行时,参与者已经完全启动,它的自我
引用从来都不是临时的。但是,如果没有代码,就不可能进一步帮助您。您的前提确实是不正确的:当预启动运行时,参与者已经完全启动,它的自我参考从来都不是临时的。但是,如果没有代码,就不可能进一步帮助您。发送者应始终被视为“临时的”——参见本博客文章,例如:
在一个数据块中,规则永远不会关闭发送方方法
可能在另一个线程中执行的代码,例如
预定的任务或未来。诀窍是捕获当前发送者
在val中,如下图所示
--
制作一份发件人的副本,然后在准备回复时,回复该actorRef副本,而不是回复“发件人”。发件人应始终被视为“临时”--参见本博客文章,例如:
在一个数据块中,规则永远不会关闭发送方方法
可能在另一个线程中执行的代码,例如
预定的任务或未来。诀窍是捕获当前发送者
在val中,如下图所示
--
制作一份发件人的副本,然后在您准备好回复时,回复actorRef的副本而不是“发件人”。您可以向您的参与者发送初始消息,这将触发发送启动消息。或者,让你的演员有状态;它的启动状态将发送消息,然后它将转换到操作状态,在该状态下它将期望收到响应。感谢@BobDalgleish-这是否需要been(receive)
调用preStart
?您可以向您的参与者发送初始消息,这将触发发送启动消息。或者,让你的演员有状态;它的启动状态将发送消息,然后它将转换到操作状态,在那里它将期望收到响应。谢谢@BobDalgleish-这是否需要调用been(receive)
preStart
?