Java essay Java essay
首页
  • Java基础
  • Java进阶
  • 设计模式
  • 多线程
  • Java你不知道的小事
  • Spring初识
  • Spring进阶
  • SpringBoot基础
  • SpringBoot进阶
  • 什么是微服务
  • SpringCloud全家桶
  • Dubbo
  • SpringCloud Alibaba
  • Vue
  • 小程序
  • 博客搭建
  • 数据库
  • python
  • 大数据
  • 性能分析优化
  • 中间件
  • 云原生
  • 面试
  • 外卖霸王餐
  • 打工人的带饭生活
  • 30岁我该怎么办
友链
关于我
GitHub (opens new window)

Mr.Fire

全栈工程师
首页
  • Java基础
  • Java进阶
  • 设计模式
  • 多线程
  • Java你不知道的小事
  • Spring初识
  • Spring进阶
  • SpringBoot基础
  • SpringBoot进阶
  • 什么是微服务
  • SpringCloud全家桶
  • Dubbo
  • SpringCloud Alibaba
  • Vue
  • 小程序
  • 博客搭建
  • 数据库
  • python
  • 大数据
  • 性能分析优化
  • 中间件
  • 云原生
  • 面试
  • 外卖霸王餐
  • 打工人的带饭生活
  • 30岁我该怎么办
友链
关于我
GitHub (opens new window)
  • 微服务概述

  • SpringCloud全家桶

    • SpringCloud之服务注册与发现
    • SpringCloud之客户端调用
      • 1、什么是Feign
      • 2、为什么需要Feign
      • 3、如何使用
      • 4、负载均衡
      • 5、总结
    • SpringCloud之微服务网关GateWay
    • 微服务网关Gateway实现熔断降级
    • 微服务网关Gateway分布式限流
  • SpringCloudAlibaba

  • 分布式锁

  • 分布式微服务
  • SpringCloud全家桶
Mr.Fire
2023-02-05
目录

SpringCloud之客户端调用

# 1、什么是Feign

Feign是由Netflix开发出来的另外一种实现负载均衡的开源框架,它封装了Ribbon和RestTemplate,实现了WebService的 面向接口编程,进一步的减低了项目的耦合度,因为它封装了Riboon和RestTemplate,所以它具有这两种框架的功能,可以 实现负载均衡和Rest调用。

# 2、为什么需要Feign

多个微服务是互相隔离的,那么微服务和微服务之间如何互相调用呢?

显然两个微服务都可以采用http通信,可以通过restTemplate+Ribbon组合进行互相访问,并实现负载均衡。但是这种方式对参数传递和使用都不是很方便,我们需要配置请求head、body,获得响应体后,还需解析等操作,十分繁琐。采用Feign进行服务之间的调用,可以简化调用流程,真正感觉到是在同一个项目中调用另一个类的方法的欢快感。本文主要讲解Feign的方式调用。

# 3、如何使用

  • 第一步 :引入依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1
2
3
4
  • 第二步: 在启动类上面加上注解:@EnableFeignClients,开启Feign

  • 第三步: 然后编写一个service接口加上@FeignClient()注解 参数就是你的微服务服务名

服务我使用上篇中的cloud-client =》SpringCloud之服务注册与发现(下)

/**
* @Author Mr.Fire
* @Desc Feign调用代理
* @Date 2021/12/5
  */
  @FeignClient("cloud-client")
  public interface FeignCilentProxy {

  @RequestMapping("/order")
  public String feignTest();
}
1
2
3
4
5
6
7
8
9
10
11
  • 第五步:调用

直接引入写好的Feign代理接口,调用对应方法,跟调用本地方法一样。

@RestController
public class TestController {
@Autowired
FeignCilentProxy feignCilentProxy;

    @GetMapping("/getOrder")
    public String orderTest(){
       String order = feignCilentProxy.feignTest();
       System.out.println(order);
       return "success";
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
  • 第四步:测试

由于我只写了一个服务cloud-client,因此我通过不同端口启动四个服务来测试负载均衡的效果。

测试效果:可以看到Feign已经实现了负载均衡

# 4、负载均衡

负载均衡就是将请求分摊给多个实例进行进行处理。根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡。

服务端负载均衡指的是发生在服务提供者一方,比如常见的nginx负载均衡。客户端负载均衡指的是发生在服务请求的一方,也就是在服务请求之前已经选好了由哪个实例进行处理。

我们在微服务中一般会选择客户端负载均衡,Ribbon就是在客户端进行了负载。Feign默认继承了Ribbon,所以自带负载均衡效果,默认轮询策略。

Ribbon支持的负载均衡策略

如何修改策略:

#cloud-client为服务名称,指明对哪个服务进行配置
cloud-client.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
1
2

# 5、总结

目前,在Spring cloud 中服务之间通过restful方式调用有两种方式 restTemplate+Ribbon 或者feign。Feign 是一个使用起来更加方便的 HTTP 客戶端, 使用起来就像是调用自身工程的方法,而感觉不到是调用远程方法,写起来更加思路清晰和方便,采用注解方式进行配置,配置熔断等方式方便。

#SpringCloud
最后更新时间: 2024/03/15, 17:35:22
SpringCloud之服务注册与发现
SpringCloud之微服务网关GateWay

← SpringCloud之服务注册与发现 SpringCloud之微服务网关GateWay→

最近更新
01
SuperBuilder
12-29
02
30岁我该怎么办
12-29
03
关于存钱
12-29
更多文章>
Theme by Vdoing | Copyright © 2021-2025 Mr.Fire | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式