Я не слишком знаком с java
версией akka
, поэтому приведенный ниже пример кода может не компилироваться, но он демонстрирует общую идею ...
Предположительно, у вас есть функции для преобразования ответа от предыдущих вызовов API в запросы следующего API:
public static HttpRequest convertAPI1Response(HttpResponse httpResponse) {
}
public static HttpRequest convertAPI2Response(HttpResponse httpResponse) {
}
Эти преобразователи могут быть помещены в Flow
значения:
final Flow<HttpResponse, HttpRequest, ...> convertAPI1Flow =
Flow.of(HttpResponse.class).map(convertAPI1Response)
final Flow<HttpResponse, HttpRequest, ...> convertAPI2Flow =
Flow.of(HttpResponse.class).map(convertAPI1Response)
Эти потоки теперь можно использовать совместно с потоками outgoingConnection
, на которые уже ссылается вопрос:
final Flow<HttpRequest, HttpResponse, CompletionStage<OutgoingConnection>> connection1Flow =
Http.get(system).outgoingConnection(toHost("https://example/api/ticker", 80));
final Flow<HttpRequest, HttpResponse, CompletionStage<OutgoingConnection>> connection2Flow =
Http.get(system).outgoingConnection(toHost("https://someOtherHost.com/api", 80));
final Flow<HttpRequest, HttpResponse, CompletionStage<OutgoingConnection>> connection3Flow =
Http.get(system).outgoingConnection(toHost("https://someOtherOtherHost.com/api", 80));
И, наконец, все Потоки могут быть соединены вместе:
final CompletionStage<HttpResponse> responseFuture =
Source.single(HttpRequest.create("/"))
.via(connection1Flow)
.via(convertAPI1Flow)
.via(connection2Flow)
.via(convertAPI2Flow)
.via(connection3Flow)
.runWith(Sink.<HttpResponse>head(), materializer).;