SpringCloud-狂神(5. 负载均衡-Feign)学习笔记

上一篇 :4. 负载均衡-Ribbon

下一篇 :6. Hystrix-熔断机制

1. 概述

1.1. 简介

feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。

  • Feign 和 Ribbon 的区别
  1. Ribbon :是通过微服务的名字来调用微服务
  2. Feign : 是通过接口和注解来调用微服务

1.2. 作用

  1. Feign 旨在使得编写 Java Http 客户端变得更容易
  2. 在前面使用 Ribbon + RestTemplate 时,利用 RestTemplate 对 Http 请求的封装处理,形成了一套模板化的调用方法。但是实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以, Feign 在此基础上,做了进一步封装,由它来帮助我们定义和实现依赖服务接口,在 Feign 的实现下,我们只需要创建一个接口,并使用注解的方式来配置它即可完成对服务提供方发接口绑定,简化了使用 SpringCloud Ribbon 时,自动封装服务调用客户端的开发量。

2. 使用

  1. 新建一个模块 :springcloud-03-consumer-dept-feign-8084

    把前文中的 springcloud-03-consumer-dept-8082 模块的内容都复制过来(除了自定义负载均衡相关的)

    修改一下端口号

  2. 在 SpringCloud-01-API-8080 和 springcloud-03-consumer-dept-feign-8084 两个项目中引入 Feign 的依赖

    <!--Feign-->
    	<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
    	<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-openfeign</artifactId>
    		<version>2.2.0.RELEASE</version>
    	</dependency>
    
  3. 在 SpringCloud-01-API-8080 模块中添加一个 service 包,以及一个 DeptClientService 接口

    /**
     * @FeignClient 标注这是一个微服务,可以被调用
     *
     * value : 微服务的名字
     */
    @Component
    @FeignClient(value = "SpringCloud-02-provider")
    public interface DeptClientService {
        /**增加
         * @param dept
         * @return
         */
        @PostMapping("/addDept")
        public boolean addDept(Dept dept);
    
        /** 按照 id 查询
         * @param id
         * @return
         */
        @GetMapping("/queryDeptById/{id}")
        public Dept queryDeptById(@PathVariable("id")Long id);
    
        /** 查询所有
         * @return
         */
        @GetMapping("/queryDepts")
        public List<Dept> queryDepts();
    }
    

    这里 Mapping 的路径,应该是提供者服务的请求路径

    在这里插入图片描述

  4. 修改 springcloud-03-consumer-dept-feign-8084 项目的 controller

    @RestController
    public class DeptConsumerController2 {
        @Autowired
        private DeptClientService service = null;
    
        @RequestMapping("/consumer/getDeptById/{id}")
        public Dept getDeptById(@PathVariable("id")Long id){
            return this.service.queryDeptById(id);
        }
    
        @RequestMapping("/consumer/getDepts")
        public List<Dept> getDepts(){
            return this.service.queryDepts();
        }
    
        @RequestMapping("/consumer/addDept")
        public Boolean addDept(Dept dept){
            return this.service.addDept(dept);
        }
    }
    
    
  5. 在 springcloud-03-consumer-dept-feign-8084 的启动类上添加一个 Feign 注解的扫描

    //扫描 Feign 注解的包
    @EnableFeignClients(basePackages = {"com.demo"})
    
  6. 启动测试

    发送请求,得到结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan_404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值