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

2023-10-22 05:45

本文主要是介绍【Spring Cloud】openfeign负载均衡方案(和lb发展历史),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

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

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

版本1:原始loadBalancerClient方案

1、引入负载均衡组件

<!-- 在消费者侧添加"负载均衡"组件 -->
<!-- 组件的作用是注册了一个LoadBalancerClient类型的bean -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

2、使用负载均衡组件

@RestController
public class NacosController{@Autowiredprivate LoadBalancerClient loadBalancerClient;@Autowiredprivate 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.ribbon</groupId><artifactId>ribbon-loadbalancer</artifactId>
</dependency>

2、如何使用

  1. 添加了负载均衡的RestTemplate
@Bean
@LoadBalanced
public RestTemplate restTemplate(){return new RestTemplate();
}
  1. 正常调用
@RestControllerpublic class TestController {@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/echo-rest/{str}")public String rest(@PathVariable String str) {// 会负载均衡服务名称nacos-providerreturn restTemplate.getForObject("http://nacos-provider/echo/" + str, String.class);}
}

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

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

1、引入组件

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

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</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. 接口实现
@RestControllerpublic class TestController {@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/echo-rest/{str}")public String rest(@PathVariable String str) {// 会负载均衡服务名称nacos-providerreturn restTemplate.getForObject("http://nacos-provider/echo/" + str, String.class);}
}
  1. 验证结果是成功的。

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

这篇关于【Spring Cloud】openfeign负载均衡方案(和lb发展历史)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/259429

相关文章

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

Java中Integer128陷阱

《Java中Integer128陷阱》本文主要介绍了Java中Integer与int的区别及装箱拆箱机制,重点指出-128至127范围内的Integer值会复用缓存对象,导致==比较结果为true,下... 目录一、Integer和int的联系1.1 Integer和int的区别1.2 Integer和in

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA