美文网首页
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