这是因为您正在启动另一台服务器ApplicationContext.run(EmbeddedServer.class)
。
你不需要它。通过构造函数注入你的类就足够了HttpClient
:
@Singleton
public class MyClient {
private final RxHttpClient client;
public MyClient(@Client("https://some.third-party.com") RxHttpClient client) {
this.client = client;
}
HttpResponse<String> getSomething(Integer id) {
URI uri = UriBuilder.of("/some-objects").path(id).build();
return client.toBlocking().exchange(HttpRequest.GET(uri), String.class);
}
}
例如,如果您在路径下的应用程序配置中有第三方服务器 URL some-service.url
,那么您可以使用@Client("${some-service.url}")
另一种选择是为第三方服务器定义声明式客户端,然后在需要时将其注入您的类中。
首先为您的第三方服务定义客户端接口:
@Client("some-service")
public interface SomeServiceClient {
@Get("/api/some-objects/{id}")
String getSomeObject(@QueryValue("id") Integer id);
}
在应用程序配置 ( application.yaml )中为该服务添加客户端配置:
micronaut:
http:
services:
some-service:
url: "https://some.third-party.com"
read-timeout: 1m
然后你可以注入SomeServiceClient
你需要的地方:
@Singleton
public class SomeServiceConsumer {
private final SomeServiceClient client;
public SomeServiceConsumer(SomeServiceClient client) {
this.client = client;
}
void doWithSomething(Integer id) {
String object = client.getSomeObject(id);
... // processing of object here
}
}
您可以在 Micronaut 文档中找到更多信息
https://guides.micronaut.io/latest/micronaut-http-client-gradle-java.html