/** Broadcast the trace events to all of the policy actors. */ private void broadcast() { try (LongStream events = eventStream()) { LongArrayList batch = new LongArrayList(batchSize); for (PrimitiveIterator.OfLong i = events.iterator(); i.hasNext();) { batch.add(i.nextLong()); if (batch.size() == batchSize) { router.route(batch, self()); batch = new LongArrayList(batchSize); } } router.route(batch, self()); router.route(FINISH, self()); } catch (Exception e) { context().system().log().error(e, ""); context().stop(self()); } }
@Override public void onReceive(Object o) throws Throwable { if(o instanceof TestActor.Msg){ router.route(o, getSender());//进行路由转发 }else if(o instanceof Terminated){ router = router.removeRoutee(((Terminated)o).actor());//发生中断,将该actor删除。当然这里可以参考之前的actor重启策略,进行优化,为了简单,这里仅进行删除处理 System.out.println(((Terminated)o).actor().path() + " 该actor已经删除。router.size=" + router.routees().size()); if(router.routees().size() == 0){//没有可用actor了 System.out.print("没有可用actor了,系统关闭。"); flag.compareAndSet(true, false); getContext().system().terminate(); } }else { unhandled(o); } }
private void terminateAll() { if (state == State.TERMINATING || state == State.TERMINATED) { return; } for (final Entry<ActorRef, String> routee : routees.entrySet()) { logger.debug("sending SIGTERM to " + routee.getValue()); } router.route(Signal.TERM, getSelf()); scheduleKillAll(); state = State.TERMINATING; }
@Override public void run() { router.route(PoisonPill.getInstance(), getSelf()); } };
@Override public void preStart() { router = new Router(new BroadcastRoutingLogic()); routees = new HashMap<ActorRef, String>(processes.size()); for (final Process process : processes) { logger.debug("starting " + process.getName() + " on port " + process.getPort()); final ActorRef processActor = getContext().actorOf(Props.create(ProcessActor.class, process), process.getName()); getContext().watch(processActor); router = router.addRoutee(processActor); routees.put(processActor, process.getName()); } router.route(Signal.FORK, getSelf()); state = State.STARTED; }
/** Broadcast the trace events to all of the policy actors. */ private void broadcast() { try (LongStream events = eventStream()) { LongArrayList batch = new LongArrayList(batchSize); for (PrimitiveIterator.OfLong i = events.iterator(); i.hasNext();) { batch.add(i.nextLong()); if (batch.size() == batchSize) { router.route(batch, self()); batch = new LongArrayList(batchSize); } } router.route(batch, self()); router.route(FINISH, self()); } catch (Exception e) { context().system().log().error(e, ""); context().stop(self()); } }
@Override public void onReceive(Object message) throws Exception { if (message instanceof Task) { router.route(message, getSender()); } else if (message instanceof Terminated) { // Readd task actors if one failed router = router.removeRoutee(((Terminated) message).actor()); ActorRef actor = getContext().actorOf(springExtension.props ("taskActor")); getContext().watch(actor); router = router.addRoutee(new ActorRefRoutee(actor)); } else { log.error("Unable to handle message {}", message); } }
router.route(new CrimeRecordsToProcess(splittedCrimeRecordsForChild), context().self());