Настроить Диспетчер в Акке набрано актеров - PullRequest
0 голосов
/ 08 июня 2018

Я работаю с набранным Akka, и я не могу проверить в официальной документации (https://doc.akka.io/docs/akka/current/typed/actors.html#actors),, что я нашел очень кратко, как настроить Диспетчер в набранном Actor.

Вот пример моего кода

private int actorTimeout = Integer.parseInt(getProperty("environment.actor.timeout", "10"));

    @Autowired
    private AkkaTypedDAO akkaTypedDAO;

    private ActorSystem<AkkaTypedDTO> system;

    @PostConstruct
    private void initActor() {
        system = ActorSystem.create(akkaTypedDAO.daoWithSupervisor, "AkkaTypedDAO");
    }

    private final Behavior<CommandAkkaTyped> service = Actor.immutable((ctx, msg) -> {
        sendToDAO(msg.id).thenApply(either -> {
            msg.replyTo.tell(either);
            return either;
        });
        return Actor.same();
    });

    public final Behavior<CommandAkkaTyped> serviceWithSupervisor = Actor.supervise(service).onFailure(Exception.class, restart());

    private CompletionStage<Either<ConnectorErrorVO, EntityDaoDTO>> sendToDAO(MUSIn<AkkaTypedPayLoad> id) {
        return AskPattern.ask(system,
                (ActorRef<Either<ConnectorErrorVO, EntityDaoDTO>> replyTo) -> new AkkaTypedDTO(new EntityDaoDTO(musIn), replyTo),
                new Timeout(actorTimeout, TimeUnit.SECONDS), system.scheduler());
    }

Когда я создаю свою систему ActorSystem, как я могу настроить диспетчер для моего Actor.immutable?

1 Ответ

0 голосов
/ 13 июля 2018

Вы используете устаревшую версию Akka Typed (см. здесь для получения дополнительной информации об истории Akka Typed API).Из текущей версии (на момент написания этой статьи, 2.5.14) документация типа Akka :

Чтобы указать диспетчер при порождении актера, используйте DispatcherSelector .Если не указан, актер будет использовать диспетчер по умолчанию, подробности см. Диспетчер по умолчанию .

public static final Behavior<Start> main =
  Behaviors.setup(context -> {
    final String dispatcherPath = "akka.actor.default-blocking-io-dispatcher";

    Props props = DispatcherSelector.fromConfig(dispatcherPath);
    final ActorRef<HelloWorld.Greet> greeter =
      context.spawn(HelloWorld.greeter, "greeter", props);

    return Behaviors.receiveMessage(msg -> {
      ActorRef<HelloWorld.Greeted> replyTo =
          context.spawn(HelloWorldBot.bot(0, 3), msg.name);
      greeter.tell(new HelloWorld.Greet(msg.name, replyTo));
      return Behaviors.same();
    });
  });
...