场景
一个环境的微服务需要调用多个host地址的同一类型接口,需要根据参数反问不同host地址的接口
解决办法
以springcloud openFeign为例,
- 将第一个参数设置为:java.net.URI,如:
/**
* /loki/api/v1/push is the endpoint used to send log entries to Loki. The default behavior is for
* the POST body to be a snappy-compressed protobuf message:
*
* @param map { "streams": [ { "stream": { "label": "value" }, "values": [ [ "<unix epoch in
* nanoseconds>", "<log line>" ], [ "<unix epoch in nanoseconds>", "<log line>" ] ] } ] }
*/
@PostMapping("/loki/api/v1/push")
Object push(URI uri, Map<String, Object> map);
openFeign将会自动根据参数请求对应的host,@FeignClient注解中配置的url将不会生效
2. java.net.URI的构建过程,这里只是举例,仅作参考
/**
* get springcloud feign host
*
* @param env current environment
* @return java.net.URI
*/
private URI getFeignHost(String env) {
try {
String stdEnvName = EnvUtils.getStdEnvName(env);
// production
if (StringUtils.isBlank(stdEnvName)) {
return new URI(String.format(lokiProperties.getHost(), stdEnvName).replace("-", ""));
}
return new URI(String.format(lokiProperties.getHost(), stdEnvName));
} catch (URISyntaxException e) {
LOGGER.error("feign URI get error", e);
}
return null;
}
通用型的host放在application.yml 中,根据参数env动态拼接最终的host地址,拼接方式请根据自身业务场景而定
版权声明:本文为qq_36289377原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。