03基于Feign的服务调用
2021-01-02 本文已影响0人
攻城老狮
一 Feign理解
与Ribbon实现服务调用相比,Feign显得更加简洁,并且操作更符合Java编程习惯。Ribbon进行远程调用需要将构造的URL内嵌到代码中,书写和传参都比较费劲,不符合Java编程习惯。而Feign使用接口的形式实现远程调用,在需要使用远程调用的类中,直接注入Feign接口的代理对象即可,不需要自己构建http请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易。
二 Feign的服务调用
- 引入依赖(另外需要注册到eureka,也需要eureka的相关配置)
<!--feign的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 启动类上加上Feign的支持
@SpringBootApplication
@EnableFeignClients //开启Feign的支持
public class OrderFeignApplication {
public static void main(String[] args) {
SpringApplication.run(OrderFeignApplication.class,args);
}
}
- 编写Feign的远程调用接口
@FeignClient(name = "product") //eureka中的服务提供者的名称
public interface ProductFeignClient {
//支持restful的注解形式,编写调用远程服务的接口方法
@GetMapping("/product/{id}")
public Product getProductById(@PathVariable Long id);
}
- 在controller中注入feign的接口实现对象,通过该代理对象实现远程调用,就像调用本地程序一样简单
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private ProductFeignClient productFeignClient; //注入
@GetMapping("/{id}")
public Product getProductById(@PathVariable Long id){
Product product = productFeignClient.getProductById(id);
return product;
}
}
- 启动Eureka Server,product,order-feign模块,对其调用进行验证
三 Feign负载均衡
Feign默认集成了Ribbon,不需要引入依赖,默认为轮询的负载均衡算法。对其负载均衡的配置与Ribbon的配置一致。
四 Feign日志
默认情况下Feign的日志是没有开启的。 要想用属性配置方式来达到日志效果,只需在 application.yml 中添加如下内容即可:
feign:
client:
config:
product:
loggerLevel: FULL
logging:
level:
com.yqj.orderfeign.feign.ProductFeginClient: debug
image-20201231152540756.png