我正在发现 Armeria 框架,我想使用 REST 服务。使用 Armeria WebClient:
WebClient webClient = WebClient.of("http://localhost:9090");
RequestHeaders getJson = RequestHeaders.of(HttpMethod.GET, "/some-service",
HttpHeaderNames.CONTENT_TYPE, "application/json", "SomeHeader", "armeriaTest");
return webClient.execute(getJson).aggregate().thenApply(resp->{
if(HttpStatus.OK.equals(resp.status())) {
return parseBody(resp.contentUtf8());
}else if(HttpStatus.BAD_REQUEST.equals(resp.status())){
throw new IllegalStateException("not exists");
}
throw new RuntimeException("Error");
});
此代码返回将异步解析的 CompletionStage,因为如果我在这里执行 join() 或 get() 会导致“java.lang.IllegalStateException:阻塞事件循环,不要这样做”。
我的问题是:如果我想使用第三方 httpclient 库(如 Apache HttpClient)而不是 Web 怎么办?客户端调用也应该包含在 Future 中?我应该如何管理客户端请求以适应框架方法并避免“阻塞事件循环”问题?
谢谢大家!