Обращаться к Акке по запросу с актерами?

ActorRef actor = ...;

Flow<HttpRequest, HttpResponse, NotUsed> flow = Flow
    .of(HttpRequest.class)
    .via(Flow.fromSinkAndSource(
        Sink
            .actorRef(actor, "COMPLETED"),
        Source
            .actorRef(4, OverflowStrategy.fail())
            .mapMaterializedValue(sourceActor -> {
                actor.tell("REGISTER", sourceActor);
                return sourceActor;
            })
        ))
    .map(info -> (HttpResponse) info);

connection.handleWith(flow, materializer);

Я создаю актера, когда соединение принято, и обрабатываю запрос HttpRequest с этим актером.

Вопрос (1): есть ли лучший способ реализовать это?

Вопрос (2): Теперь запросы от соединения отправляются тому же субъекту, и я могу получить token из HttpRequest. Как я могу отправлять запросы определенной актерской базе на token? Следующий псевдокод - это то, что я пытаюсь сделать.

Flow<HttpRequest, HttpResponse, NotUsed> flow = Flow
    .of(HttpRequest.class)
    .via(
        .........................................................
        String token = retrieveTokenFromHttpRequest(HttpRequest);
        ActorRef actor = actorContainer.get(token);
        .........................................................
        Flow.fromSinkAndSource(
            Sink
                .actorRef(actor, "COMPLETED"),
            Source
                .actorRef(4, OverflowStrategy.fail())
                .mapMaterializedValue(sourceActor -> {
                    actor.tell("REGISTER", sourceActor);
                    return sourceActor;
                })
            )
    )
    .map(info -> (HttpResponse) info);

connection.handleWith(flow, materializer);

0 ответов

Другие вопросы по тегам