SpringCloud之Feign负载均衡(基于服务端)

1. 什么Feign

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

  • SpringCloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。

  • 只需要创建一个接口,然后添加注解即可!

  • feign,主要是社区,大家都习惯面向接口编程。这个是很多开发人员的规范。

  • 调用微服务访问两种方法

    • 1.微服务名字【ribbon】
    • 2.接口和注解【feign】

总结:

  • Feign是基于接口的注解;
  • Feign整合了ribbon,具有负载均衡的能力;
  • 整合了Hystrix,具有熔断的能力。

2. Feign能干什么?

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

3. Feign默认集成了Ribbon

  • 利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

4. 整合Feign

复制一份跟springcloud-consumer-dept-80模块一样并命名为springcloud-consumer-dept-feign,具体可参考:https://blog.csdn.net/Yearingforthefuture/article/details/117856588

4.1 导入依赖

在springcloud-consumer-dept-feign的pom.xml中添加:

<!--feign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign </artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

4.2 编写Controller

DeptConsumerController.java,通过注解调用服务提供者

@RestController
@RequestMapping("/consumer/dept")
public class DeptConsumerController {

    @Autowired
    public DeptClientService deptClientService;

    @RequestMapping("/add")
    public boolean addDept(Dept dept) {
        return deptClientService.addDept(dept);
    }

    @GetMapping("/get/{id}")
    public Dept queryById(@PathVariable("id") Long id) {
        return deptClientService.queryById(id);
    }

    @GetMapping("/get/list")
    public List<Dept> quertAll() {
        return deptClientService.quertAll();
    }


}

4.3 开启注解支持

FeignDeptConsumer_80.java

/**
 * 启动类
 */
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient //通过@EnableDiscoveryClient注解让改应用注册为Eureka客户端应用,以获得服务发现的能力
@EnableFeignClients(basePackages = {"com.test.springcloud"})//开启api模块注解的支持
@Component("com.test.springcloud") //开启feign模块注解的支持
public class  FeignDeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(FeignDeptConsumer_80.class,args);
    }
}

4.4 修改springcloud-api

4.4.1 导入依赖

在springcloud-api的pom.xml中添加

<!--feign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign </artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

4.4.2 添加Service

DeptClientService.java

@Component
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT")
public interface DeptClientService {
    @PostMapping("/dept/add")
    public boolean addDept(Dept dept);

    @GetMapping("/dept/get/{id}")
    public Dept queryById(@PathVariable("id") Long deptno);

    @GetMapping("/dept/list")
    public List<Dept> quertAll();
}

4.5 启动测试

在浏览器中输入:http://localhost/consumer/dept/get/list
feign跟ribbon一样可以照常的访问。
在这里插入图片描述

5. 总结

  • Feign负载均衡(基于服务端),Ribbon负载均衡(基于客户端);
  • Feign是基于接口的注解,Ribbon通过RestTemplate和服务名进行调用;
  • Feign使用面向接口风格,Ribbon使用REST风格。

内容参考:https://www.bilibili.com/video/BV1jJ411S7xr
仅用于学习!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值