【Spring Cloud】openfeign负载均衡方案(和lb发展历史)

文章目录

  • 版本1:原始loadBalancerClient方案
  • 版本2:ribbon-loadbalancer方案
  • 版本3:openfeign方案(即**方案2+openfeign版本**)

本文描述了Spring Cloud微服务中,各个服务间调用的负载均衡方案的升级历史,目前市场通用的是openfeign方案。

版本1:原始loadBalancerClient方案

1、引入负载均衡组件



<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-loadbalancerartifactId>
dependency>

2、使用负载均衡组件

@RestController
public class NacosController{

    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @Autowired
    private RestTemplate restTemplate;

    @Value("${spring.application.name}")
    private String appName;

    @GetMapping("/echo/app-name")
    public String echoAppName(){
        // <1>
        ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
        String path = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),appName);
        System.out.println("request path:" +path);
        // <2>
        return restTemplate.getForObject(path,String.class);
    }
}

在代码<1>处,首先用复杂均衡组件提供的LoadBalancerClient选择出具体是哪一个微服务instance提供服务;然后在代码<2>处请求具体的instance获取结果。

注意:

1、此时的RestTemplate就是原始的RestTemplate,而没有加@LoadBalance注解,因为负载均衡功能已经由loadBalancerClient完成了。

@Bean
public RestTemplate restTemplate(){

    return new RestTemplate();
}

版本2:ribbon-loadbalancer方案

1、引入组件

<dependency>
    <groupId>com.netflix.ribbongroupId>
    <artifactId>ribbon-loadbalancerartifactId>
dependency>

2、如何使用

  1. 添加了负载均衡的RestTemplate
@Bean
@LoadBalanced
public RestTemplate restTemplate(){

    return new RestTemplate();
}
  1. 正常调用
@RestController
 public class TestController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/echo-rest/{str}")
    public String rest(@PathVariable String str) {
        // 会负载均衡服务名称nacos-provider
        return restTemplate.getForObject("http://nacos-provider/echo/" + str, String.class);
    }
}

版本3:openfeign方案(即方案2+openfeign版本

该方案是目前市场流行度较高的方案,用接口+@FeignClient注解方式。

1、引入组件

openfeign 会间接引入@LoadBalance注解及负载均衡功能。

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-openfeignartifactId>
dependency>

2、如何使用

  1. 远程接口
@FeignClient(name = "nacos-provider")
public interface EchoService {
    @GetMapping(value = "/echo/{str}")
    String echo(@PathVariable("str") String str);
}
  1. 添加了负载均衡的RestTemplate
@Bean
@LoadBalanced
public RestTemplate restTemplate(){

    return new RestTemplate();
}
  1. 接口实现
@RestController
 public class TestController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/echo-rest/{str}")
    public String rest(@PathVariable String str) {
        // 会负载均衡服务名称nacos-provider
        return restTemplate.getForObject("http://nacos-provider/echo/" + str, String.class);
    }
}
  1. 验证结果是成功的。

参考代码:https://gitee.com/firefish985/FireFish/FireFish-Learning/nacos-discovery-consumer

你可能感兴趣的:(Spring,Cloud,spring,cloud,负载均衡)