2
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);
4

0 回答 0