Акка актер для http запроса Java - PullRequest
0 голосов
/ 12 ноября 2018

Здравствуйте. Я пытаюсь найти простой пример в AKKA - Java для создания HTTP-клиента и актера.Пока что я могу создать запрос и получить ответ HTTP Entity.Мне нужно перенести его на актера, чтобы я мог вызывать несколько акторов параллельно с тайм-аутом.

 final ActorSystem system = ActorSystem.create();
    final Materializer materializer = ActorMaterializer.create(system);

    final List<HttpRequest> httpRequests = Arrays.asList(
            HttpRequest.create(url) // Content-Encoding: gzip in respons

    );

    Unmarshaller<ByteString, BitTweet> unmarshal = Jackson.byteStringUnmarshaller(BitTweet.class);
    JsonEntityStreamingSupport support = EntityStreamingSupport.json();

    final Http http = Http.get(system);

    final Function<HttpResponse, HttpResponse> decodeResponse = response -> {
        // Pick the right coder
        final Coder coder;
        if (HttpEncodings.gzip().equals(response.encoding())) {
            coder = Coder.Gzip;
        } else if (HttpEncodings.deflate().equals(response.encoding())) {
            coder = Coder.Deflate;
        } else {
            coder = Coder.NoCoding;
        }

        // Decode the entity
        return coder.decodeMessage(response);
    };

    List<CompletableFuture<HttpResponse>> futureResponses = httpRequests.stream()
            .map(req -> http.singleRequest(req, materializer)
                    .thenApply(decodeResponse))
            .map(CompletionStage::toCompletableFuture)
            .collect(Collectors.toList());

    for (CompletableFuture<HttpResponse> futureResponse : futureResponses) {
        final HttpResponse httpResponse = futureResponse.get();

        system.log().info("response is: " + httpResponse.entity()
                .toStrict(1, materializer)
                .toCompletableFuture()
                .get());


        HttpEntity.Strict entity_ = HttpEntities.create(ContentTypes.APPLICATION_JSON, httpResponse.entity().toString());

                 Source<BitTweet, Object> BitTweet =
                         entity_.getDataBytes()
                        .via(support.framingDecoder()) // apply JSON framing
                        .mapAsync(1, // unmarshal each element
                                bs -> unmarshal.unmarshal(bs, materializer)


                        );
...