首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >akka乒乓球不工作

问akka乒乓球不工作
EN

Stack Overflow用户
提问于 2017-07-12 20:19:06
回答 1查看 129关注 0票数 0

我想让Ping和Pong的演员使用akka每秒都被调用。

此代码不起作用

我想要这个生命周期

TestMain -> ping -> pong -> ping -> pong..

代码语言:javascript
复制
public class TestMain {
    public static void main(String[] args){
        ActorSystem actorSystem = ActorSystem.create("TestActorSystem");
        ActorRef ping = actorSystem.actorOf(Props.create(PingActor.class), "pingActor");
        ping.tell("start", ActorRef.noSender());
    }
}


public class PingActor extends AbstractActor{

    private static Logger log = LoggerFactory.getLogger(PingActor.class);
    private ActorRef pong;

    @Override
    public void preStart() throws Exception {
        this.pong = getContext().actorOf(Props.create(PongActor.class, getSelf()), "pongActor");
    }

    @Override
    public Receive createReceive() {
        return receiveBuilder()
            .match(PingCallTell.class, this::tell)
            .matchAny(this::unhandled)
            .build();
    }

    public class PingCallTell{}

    private void tell(PingCallTell call) throws Exception{
        log.info("Ping received..");
        pong.tell("ping", getSelf());
    }
}

public class PongActor extends AbstractActor{

    private ActorRef ping;

    public PongActor(ActorRef ping) { 
        this.ping = ping;
    }

    //same PingActor createReceive() 

    private void tell(PongCallTell call) throws Exception {
        log.info("Pong received..");
        ping.tell("pong", getSelf()); 
        Thread.sleep(1000);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-07-13 03:32:38

不过,我在Scala中尝试得很快

代码语言:javascript
复制
object PingPong {
  def main(args: Array[String]): Unit = {
    val actorSystem = ActorSystem.create("PingPongSys")
    val pingPongActor = actorSystem.actorOf(Props[PingPongActor])
    pingPongActor ! Ping
  }
}

class PingPongActor extends Actor {
  override def receive: Receive = {
    case Ping =>
      println("Ping ...")
      Thread.sleep(1000)
      self ! Pong
    case Pong =>
      println("Pong ......")
      Thread.sleep(1000)
      self ! Ping
    case _ =>
      println("Foul !!")
  }
}

输出如下所示

代码语言:javascript
复制
Ping ...
Pong ......
Ping ...
Pong ......
Ping ...
Pong ......
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45057535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档