我正在学习如何使用上下文。为了控制我的参与者的状态,我使用以下代码:
class MyActor extends Actor {
override def receive: Receive = {
println("Happens here")
active(Set.empty)
}
def active(isInSet: Set[String]): Receive = {
case Add(key) =>
context.become(active(isInSet+key))
case Contains(key) =>
sender() ! isInSet(key)
case ShowAll =>
println(isInSet.toSeq)
}
}
case class Add(key: String)
case class Contains(key: String)
object ShowAll
object DemoBecome extends App{
override def main(args: Array[String]): Unit = {
val system = ActorSystem("BecomeUnbecome")
val act = system.actorOf(Props(classOf[MyActor]), "demoActor")
act ! Add("1")
act ! ShowAll
act ! Add("2")
act ! ShowAll
Thread.sleep(10000)
System.exit(0)
}
当我发送第一条消息时,“接收”工作并打印消息,第二条消息不显示后,这是我的输出:
Happens here
Set()
Vector(1)
Set(1)
Vector(1, 2)
如果我改变接收方式,为此:
def receive = {
case a: Add => println("happens here Add" )
case c: Contains => println("happens here Contains")
case ShowAll => println("happens here Show")
}
我收到以下输出:
happens here Add
happens here Show
happens here Add
happens here Show
所以我试着跟踪“接收”被“阻止”的时刻,但没有成功,我的疑问是:当我使用上下文时。在《我的演员》中,Akka如何以及何时处理第一次之后的信息?
当您使用context.become
时,您正在更改演员中的行为。这意味着,当参与者使用默认的接收
行为启动它时。但是,当它收到消息时,它会打印消息在这里发生
,并使用部分函数active
来处理它。
因为,在活动中
您调用上下文。变为(活动())
参与者的行为会发生变化。从现在起,当消息被发送到参与者时,它将执行部分功能active
,而不是receive
方法,这就是为什么您不会看到在输出中多次发生。
我有父母和孩子。每个儿童演员控制一个装置。当我创建所有的子角色时,我给他们一个uuid。 每个子参与者都是通过设备配置创建的,当配置更改时,我希望通过以下方式重新创建参与者: > 停止旧的: 最终的未来停止了=优雅的停止(actorRef,Duration.create(1,时间单位。秒)); Await.result(停止,Duration.create(1, TimeUnit.二)); 重新创
我正在研究akka actors(JAVA),最近我知道有3种方法(可能更多)来了解一个演员的存在。 > 解决方法之一: DeatchWatch:创建另一个参与者调用getContext()。手表(ActorWatch的ActorRef);并检查是否接收到终止的消息。这只能用于已创建的参与者。 1,2表示存在参与者和3个监视器。我想知道这三个应用程序的用例以及它们对actors邮箱和功能的影响,以
我只是从阿卡开始,我试图将一些混乱的功能分成更容易管理的部分,每个部分都由不同的演员执行。 我的任务似乎正是适合演员模式的。我有一个对象树,它们保存在数据库中。每个节点都有一些属性;让我们只关注一个,称之为财富。孩子的财富取决于父母的财富。当计算节点上的财富时,这应该会在子节点上触发类似的计算。我想收集节点的所有更新实例,并同时将它们保存在数据库中。 这似乎很简单:一个参与者只需执行计算,然后为当
是否有方法获取创建actor的类。例如,我有一个actorRef或actor selection实例,我想从中获取创建现有actor的类。提前感谢您的回复!
我是Akka的新手,我想知道我应该如何处理将工作委托给其他(儿童)演员的演员,但在哪里: 其中一些儿童演员必须按特定顺序参与;和 其中一些子参与者可以以任何顺序参与,并且可以真正地与主/父参与者所做的事情异步执行 假设我有以下儿童演员(不管他们做什么): 假设我有以下调用它们的父参与者: 如你所见: 必须首先“参与”(由家长调用),我们必须等待家长的响应,然后才能继续参与/调用、或 换句话说,当消