2017-05-11 15 views
0

私はakkaを学ぶために、URLを問い合わせる簡単な例を作っています。私はAkka HTTPの公式docsの例を使用しようとしていましたが、 "驚くほど"公式の文書は時代遅れです。akka-http_2.12 v10.0.6で単純なhttpリクエストを実行する方法

私はStackOverflowでthis answerをここで使用しようとしていましたが、古いAPIを参照しています。

私のコードは次のとおりです。

import java.util.concurrent.CompletionStage; 

import static akka.pattern.Patterns.pipe; 

import akka.actor.AbstractActor; 
import akka.http.javadsl.Http; 
import akka.http.javadsl.model.HttpRequest; 
import akka.http.javadsl.model.HttpResponse; 
import akka.japi.pf.FI.UnitApply; 
import akka.japi.pf.ReceiveBuilder; 
import akka.stream.ActorMaterializer; 
import akka.stream.Materializer; 
import scala.concurrent.ExecutionContextExecutor; 

public class RequestForPageActor extends AbstractActor { 
    final Http http = Http.get(context().system()); 
    final ExecutionContextExecutor dispatcher = context().dispatcher(); 
    final Materializer materializer = ActorMaterializer.create(context()); 

    @Override 
    public Receive createReceive() { 
     return receiveBuilder().match(RequestForPage.class, onRequestForPage()).build(); 
     // TODO: Handle page response 
    } 

    private UnitApply<RequestForPage> onRequestForPage() { 
     return request -> { 
      pipe(fetch(request.getUrl()), dispatcher).to(self()); 
     }; 
    } 

    CompletionStage<HttpResponse> fetch(String url) { 
     return http.singleRequest(HttpRequest.create(url), materializer); 
    } 
} 

問題は、APIが変更されたことです。コンパイラの苦情は以下の通りです:The method pipe(Future<T>, ExecutionContext) in the type Patterns is not applicable for the arguments (CompletionStage<HttpResponse>, ExecutionContextExecutor)

質問:URLと処理結果を照会するこの簡単なタスクはどのように実行しますか?

+0

前述のとおり、Scala FutureはJava CompletableFuture/CompletableStageではありません。あなたはAPIの –

答えて

2

文書は古くなっていません。間違った静的メソッドをインポートするだけです。

import static akka.pattern.PatternsCS.pipe; 

PatternsCS

import static akka.pattern.Patterns.pipe; 

を交換は、CompletionStage代わりFutureで動作パターンの実装の束を含んでいます。いくつかの使用例はdocs pageにあります。

関連する問題