我有一个ActorSystem,在这里我创建了一个顶级演员,在这个顶级演员中,我创建了几个孩子演员。到目前为止还不错!
然后我要做的是将这些子参与者公开给我的应用程序控制器(在Play应用程序中),这样我就可以直接从我的Play控制器中传递给相应的子参与者的消息。这是一个好的做法,还是我应该总是通过主管向儿童演员传递信息?在代码中,如下所示:
class Application extends Controller with MyActors {
def createUser = { request =>
val user: User = ... get the User
我想问你一件事。我有一个“评论”演员和更多的“森演员”。第一个是必须转发的消息列表,发送者是不断向接收方发送消息的参与者。
就像这样:
class Rec (frw: Actor) extends Actor
{
val myList = Nil;
def act =
{
case "Start" => while(true) {/*Extract the first number and send it to frw*/} //I must use a new actor if I want to keep reading
我构建了一个Akka角色,它以固定的时间间隔查询API,如下所示:
val cancellable =
system.scheduler.schedule(0 milliseconds,
5 seconds,
actor,
QueryController(1))
演员,本质上是:
object UpdateStatistics {
/**
* Query the controller for the given switch Id
*
* @param dpId Switch's Id
*/
case cl
我有两个演员,演员A给演员B发送消息。然后,演员B应该处理这些数字并将它们打印在同一行上。
我的代码:
class ActorB extends Actor{
def receive = {
case 0 => println("0")
case x : Int => println (x)
}
}
但不会编译
WebSocket.acceptWithActor实例化了一个新的Akka演员,而没有使用Guice。
使用Play 2.4,通过导入play.api.Play.current仍然可以为我的演员使用注射器。
来自的片段
import scala.concurrent.Future
import play.api.Play.current // should be deprecated in favor of DI
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import play.modules.re
我有akka系统,基本上是两个制片人演员,发送信息给一个消费者演员。以简化的形式,我有这样的东西:
class ProducerA extends Actor {
def receive = {
case Produce => Consumer ! generateMessageA()
}
... more code ...
}
class ProducerB extends Actor {
def receive = {
case Produce => Consumer ! generateMessageB()
我对Akka非常陌生,我有一个(希望)简单的问题。我有一个演员需要重复做一个小的子任务,也就是说,每次这个演员收到一个消息,它就必须做N个子任务。这个子任务是我指定给一个儿童演员的。我的问题是,我应该为每个子任务创建一个子演员的新实例吗?或者我应该只生一个孩子演员,然后给它发N条消息?在这种情况下,最佳做法是什么?
为了更好地说明我的问题,这里有两个简单的示例(在Java中--但希望对Scala的人来说足够简单!):
第一个参与者类在构造时创建一个单个子参与者,然后向该单个子参与者发送许多消息。
public class ParentActor extends UntypedActor {
我有两个演员实例,如下所示:
class MyActor1(actorRef2: Actor) extends Actor {
....
....
}
class MyActor2 extends Actor {
....
....
}
以上两位演员都是由一位顶级演员创造的,我在那里有一些监督。
现在我的问题是,如果MyActor2被某种方式杀死了,那么我传递给MyActor1的这个MyActor2的引用会发生什么呢?MyActor1是否仍然可以使用传递给它的引用发送消息,这样MyActor2在复活后仍然可以获得消息吗?
我刚接触过阿克卡和演员模特,我在尝试测试一个演员的时候也很挣扎。
在中,您可以创建一个简单的参与者,它将自己限制到本地端口,并使用以下代码侦听传入的连接:
class Server extends Actor {
import Tcp._
import context.system
IO(Tcp) ! Bind(self, new InetSocketAddress("localhost", 12345))
def receive = {
case b @ Bound(localAddress) =>
// do some log
我们有一个集群的切分参与者,名为A,它有多个子参与者,每个实体模式都有子角色,如下所示。当我们告诉演员B到D的100条消息时,演员D用500 ms来处理每条消息,同时,当我们使用Context.Parent.Tell (新的被动语(PoisonPill.Instance ))向演员A发送毒丸时,它会立即停止所有的儿童演员,包括演员D,而不处理未决消息。
A
|
B
/ \
C D
是否有办法等待参与者D处理所有消息?
我是Akka的新手,我试图用Java在Play Framework 2中编写一些代码,并使用Akka。要创建一个参与者并向其发送测试消息,我有:
public class Global extends GlobalSettings {
@Override
public void onStart(Application app) {
final ActorRef testActor = Akka.system().actorOf(Props.create(TestActor.class), "testActor");
testAc
在akka中,假设有一个线性的参与者链,使得每个参与者接收来自上游的消息,向下游发送自己的消息,等待回复,然后向上游发送消息。当上游演员必须稍后回复该演员时,他怎么能记住上游演员的手柄呢?
例如:
A sends message to B (b ! "msg1")
B sends message to C (c ! "msg2")
C replies to B (self.reply ! "msg3")
B replies to A <--- ???
基本上,B怎么能记住A的手柄?此时执行self.reply将引用C,因为C将当前消息发送给
我有一个关于阿克卡的背景的问题。我有以下演员:
class MyActor extends Actor {
def active(state: State): Receive = {
case Dispatch(power) => // Dispatch to the specified power value
context.become(
checkRamp(
Observable.intervalAtFixedRate(cfg.rampRateInSeconds),
State.dispatch(