Tus*_*har 5 restclientbuilder microprofile quarkus
Quarkus using Rest Client,解释了如何使用 MicroProfile REST Client。对于基本 URL application.properties 可以使用。
org.acme.restclient.CountriesService/mp-rest/url=https://restcountries.eu/rest #
Run Code Online (Sandbox Code Playgroud)
使用上述方法,不能有动态基本 URL。
能够通过使用 RestClientBuilder 来实现它,如MicroProfile Rest Client 中所述。这种方法的缺点是没有自动协商功能。
SimpleGetApi simpleGetApi = RestClientBuilder.newBuilder().baseUri(getApplicationUri()).build(SimpleGetApi.class);
Run Code Online (Sandbox Code Playgroud)
有没有其他或更好的方法来实现这一目标?谢谢。
虽然确实如此,当您使用声明式/注入式客户端时,MP Rest 客户端不允许您动态设置 BaseUri,但有一些(尽管很hacky)方法可以实现这一点。
一种是使用ClientRequestFilter可以修改URL的标准:
@Provider
@Slf4j
public class Filter implements ClientRequestFilter {
@Inject RequestScopeHelper helper;
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
if (helper.getUrl() != null) {
URI newUri = URI.create(requestContext.getUri().toString().replace("https://originalhost.com", helper.getUrl()));
requestContext.setUri(newUri);
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪里RequestScopeHelper有一些帮助类(例如请求作用域 bean),您可以通过它传递动态 url,例如:
@Inject
RequestScopeHelper helper;
@Inject
@RestClient
TestIface myApiClient;
public void callSomeAPIWithDynamicBaseUri(String dynamic) {
helper.setUrl(dynamic);
myApiClient.someMethod();
}
Run Code Online (Sandbox Code Playgroud)
第二种是使用 MP Rest 客户端 SPI,即RestClientListener,它允许您在构建其余客户端后对其进行修改。
为此,您必须将其余客户端的范围设置为RequestScoped,以便为每个请求创建新实例(例如,如果您使用单例,则客户端仅创建一次,并且您的侦听器将仅被调用一次)。您可以通过 quarkus 属性来做到这一点:
quarkus.rest-client."com.example.MyRestIface".scope=javax.enterprise.context.RequestScoped
Run Code Online (Sandbox Code Playgroud)
quarkus.rest-client."com.example.MyRestIface".scope=javax.enterprise.context.RequestScoped
Run Code Online (Sandbox Code Playgroud)
不要忘记将此侦听器注册为服务提供者( META-INF/services/org.eclipse.microprofile.rest.client.spi.RestClientListener)
另一种选择是使用自定义 CDI 生成器,它会为您生成 Rest 客户端实例;那么你可以自己控制所有客户端配置。您可以使用RestClientBase Quarkus 的 Rest 客户端,这正是 Quarkus 在部署阶段在后台使用的构建客户端实例的方法。但是,您必须复制与处理程序、拦截器等注册相关的所有逻辑。
请记住,这些解决方案中的任何一个都会使调试和问题分析更具挑战性 - 因为您现在将有多个位置控制 URI(MP config/quarkus 属性、环境变量、您的自定义实现...) ,因此您需要小心您的方法,并且在手动覆盖 URI 时可能会添加一些显式日志消息。
| 归档时间: |
|
| 查看次数: |
1635 次 |
| 最近记录: |