私は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と処理結果を照会するこの簡単なタスクはどのように実行しますか?
前述のとおり、Scala FutureはJava CompletableFuture/CompletableStageではありません。あなたはAPIの –