专业的编程技术博客社区

网站首页 > 博客文章 正文

spring cloud公共代理类调用FeignClient

baijin 2024-09-20 12:33:24 博客文章 3 ℃ 0 评论

在spring cloud使用Feign调用微服务时,常用两种方式:

  1. 由微服务提供端提供与微服务接口对应的client类(包含了所有的微服务客户端接口);
  2. 有客户端自身根据需要来获取client实例;即下面提供的公共代理类来调用FeignClient客户端方式。


工具类代码API:

public class FeignClientProxyUtil {

 public static <T> T getClientByServiceId(String serviceId,Class<T> t) throws Exception{

 ServiceInstance instance = ((LoadBalancerClient)SpringBeanNewUtil.getBean("loadBalancerClient")).choose(serviceId);

 if (instance != null) {

 String feignClientURL = instance.getUri().toString();

 T client = Feign.builder()

 .encoder(new JacksonEncoder())

 .decoder(new JacksonDecoder())

 .target(t,feignClientURL);

 return client;

 }else{

 throw new Exception("FeignClientProxyUtil通过微服务名称未找到可用微服务:"+serviceId);

 }

 }

}


调用方式:

例如:

@RequestMapping(value="/listBizcodeByCategory/{category}")
 List<Bizcode> listBizcodeByCategory(@PathVariable("category") String category) throws Exception{
// return BizcodeClientProxyUtil.listBizcodeByCategory(category,null);
 return FeignClientProxyUtil.getClientByServiceId(this.BIZCODE_SERVICE_ID, BizcodeClient.class).listBizcodeByCategory(category);
 }


备注:如果作为某个服务的api是作为工具类使用,他随着microservice发布,都会产生一个微服务服务端;而在controller中只访问对应的微服务,则可以在application.properties中配置服务名;

这样就达到了,代码一套,服务名可以自定义

例如:

1. application.properties文件加入:

bizCode_service_id(变量名)=data-service(服务名id)

2. 并且在对应的controller类中使用注解获取配置项:

BizcodeController.java加入代码

 /**
 * 码表的微服务来源:配置微服务的serviceId,例如:data-service
 */
 @Value("${bizCode_service_id}")
 public String BIZCODE_SERVICE_ID ;//= "data-service";

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表