如何使用 akka-http_2.12 v10.0.6 执行简单的 http 请求
How to perform simple http request with akka-http_2.12 v10.0.6
我正在尝试通过制作查询 urls 的简单示例来学习 akka。我试图使用来自 Akka HTTP 官方 docs 的示例,但 "surprisingly" 官方文档已过时。
我试图在 Whosebug 上使用 ,但同样 - 它指的是过时的 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 和处理结果这一简单任务?
文档没有过时。您只是导入了错误的静态方法。
替换
import static akka.pattern.Patterns.pipe;
和
import static akka.pattern.PatternsCS.pipe;
PatternsCS
包含一堆与 CompletionStage
而不是 Future
一起工作的模式实现。可以在 docs page.
中找到一些用法示例
我正在尝试通过制作查询 urls 的简单示例来学习 akka。我试图使用来自 Akka HTTP 官方 docs 的示例,但 "surprisingly" 官方文档已过时。
我试图在 Whosebug 上使用
我的代码是:
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 和处理结果这一简单任务?
文档没有过时。您只是导入了错误的静态方法。
替换
import static akka.pattern.Patterns.pipe;
和
import static akka.pattern.PatternsCS.pipe;
PatternsCS
包含一堆与 CompletionStage
而不是 Future
一起工作的模式实现。可以在 docs page.