美文网首页
03基于Feign的服务调用

03基于Feign的服务调用

作者: 攻城老狮 | 来源:发表于2021-01-02 08:14 被阅读0次

一 Feign理解

与Ribbon实现服务调用相比,Feign显得更加简洁,并且操作更符合Java编程习惯。Ribbon进行远程调用需要将构造的URL内嵌到代码中,书写和传参都比较费劲,不符合Java编程习惯。而Feign使用接口的形式实现远程调用,在需要使用远程调用的类中,直接注入Feign接口的代理对象即可,不需要自己构建http请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易。

二 Feign的服务调用

  1. 引入依赖(另外需要注册到eureka,也需要eureka的相关配置)
<!--feign的依赖-->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 启动类上加上Feign的支持
@SpringBootApplication
@EnableFeignClients //开启Feign的支持
public class OrderFeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderFeignApplication.class,args);
    }
}
  1. 编写Feign的远程调用接口
@FeignClient(name = "product") //eureka中的服务提供者的名称
public interface ProductFeignClient {

    //支持restful的注解形式,编写调用远程服务的接口方法
    @GetMapping("/product/{id}") 
    public Product getProductById(@PathVariable Long id);

}
  1. 在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;
    }
}
  1. 启动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

相关文章

网友评论

      本文标题:03基于Feign的服务调用

      本文链接:https://www.haomeiwen.com/subject/ceijoktx.html