【Spring Cloud 系列】四、负载均衡(Ribbon)(Hoxton.M3 版本)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 【Spring Cloud 系列】四、负载均衡(Ribbon)(Hoxton.M3 版本)

环境:


IDEA
JDK1.8
Spring Cloud Hoxton.M3
Spring Boot 2.2.0


一、Ribbon简介


  Spring Cloud Ribbon是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。Feign默认集成了Ribbon。它是一个工具类框架,不像服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中。微服务间的调用,API网关的请求转发等,都是通过Ribbon来实现的,包括后面要介绍的Feign,也是基于Ribbon实现的工具。


Ribbon已经默认实现了这些配置bean:


  • IClientConfig ribbonClientConfig: DefaultClientConfigImpl
  • IRule ribbonRule: ZoneAvoidanceRule
  • IPing ribbonPing: NoOpPing
  • ServerList ribbonServerList: ConfigurationBasedServerList
  • ServerListFilter
  • ribbonServerListFilter: ZonePreferenceServerListFilter
  • ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer


二、创建项目


1.File ----- New -----Project


image.png



2.Spring Initializr  ----- Next


image.png


3.等待创建项目中


image.png


4.输入 Group   和  Artifact 点击 Next


image.png


5.选择 Spring Cloud Routing  ----- Ribbon 点击 Next


image.png


6.点击 Finish 创建完成


image.png


三、完善项目


1.引入补充的依赖 ribbon依赖和eureka依赖


<!--eureka-client-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!--eureka ribbon-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
<!--springboot web-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

2.添加启动注解信息

@EnableEurekaClient
package cn.mcus;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class RibbonserverApplication {
  public static void main(String[] args) {
    SpringApplication.run(RibbonserverApplication.class, args);
  }

3.添加RestTemplate

 @Bean
  @LoadBalanced
  RestTemplate restTemplate(){
    return new RestTemplate();
  }

4.添加配置文件信息

server.port=8764
spring.application.name=RibbtonServer
#注册到服务中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#是否注册到eureka服务器,
eureka.client.registerWithEureka=true 
#是否从eureka服务器获取注册信息
eureka.client.fetchRegistry=true
#是否开启自我保护模式,默认为true。
eureka.server.enable-self-preservation=true

5.编写Controller

@RestController
public class RibbonController {
    @Autowired
    private RibbonService ribbonService;
    @RequestMapping("getRibbon")
    public String getRibbon(String name){
        String company = ribbonService.getRibbon(name);
        return company;
    }
}

6.编写Service

public interface RibbonService {
    String getRibbon(String name);
}

7.编写ServiceImpl

@Service
public class RibbonServiceImpl implements RibbonService {
    @Autowired
    private RestTemplate restTemplate;
    @Override//程序名替代服务地址,ribbon会根据服务名自动选择服务实例
    public String getRibbon(String name) {
        String result = restTemplate.getForObject("http://Client-Server1/test?name=" + name, String.class);
        return result;
  }



四、启动项目


1.依次启动


EurekaServer ClientServer1 ClientServer2 RibbonServer 四个项目

image.png


2.在浏览器中输入:http://localhost:8761/  出现如下页面


image.png

  红框代表服务都注册到Eureka 服务中。端口分别为8762,8763,8764


3.在浏览器中输入Ribbon 服务的地址:


image.png

 再次点击刷新:端口号为8762,8763,8764

  这说明当我们通过调用restTemplate.getForObject()方法时,已经做了负载均衡,访问了不同的端口的服务实例。


五、负载均衡架构


image.png

 1.一个服务注册中心,EurekaServer端口为8761ClientServer1、ClientServer2、RibbonServer三个实例端口分别为8762,8763,8764,向服务注册中心注册。

  2.当RibbonServer通过RestTemplate调用ClientServer1的接口时,因为用Ribbon进行了负载均衡,会轮流的调用ClientServer8762和8763 两个端口的服务接口。

  以上就是一个Spring Cloud 负载均衡的学习过程。



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
4月前
|
开发框架 负载均衡 Java
当热门技术负载均衡遇上 Spring Boot,开发者的梦想与挑战在此碰撞,你准备好了吗?
【8月更文挑战第29天】在互联网应用开发中,负载均衡至关重要,可避免单服务器过载导致性能下降或崩溃。Spring Boot 作为流行框架,提供了强大的负载均衡支持,通过合理分配请求至多台服务器,提升系统可用性与可靠性,优化资源利用。本文通过示例展示了如何在 Spring Boot 中配置负载均衡,包括添加依赖、创建负载均衡的 `RestTemplate` 实例及服务接口调用等步骤,帮助开发者构建高效、稳定的应用。随着业务扩展,掌握负载均衡技术将愈发关键。
121 6
|
1月前
|
负载均衡 监控 网络协议
SpringCloud之Ribbon使用
通过以上步骤,就可以在Spring Cloud项目中有效地使用Ribbon来实现服务调用的负载均衡,提高系统的可靠性和性能。在实际应用中,根据具体的业务场景和需求选择合适的负载均衡策略,并进行相应的配置和优化,以确保系统的稳定运行。
74 15
|
1月前
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
89 5
|
22天前
|
负载均衡 Java Nacos
常见的Ribbon/Spring LoadBalancer的负载均衡策略
自SpringCloud 2020版起,Ribbon被弃用,转而使用Spring Cloud LoadBalancer。Ribbon支持轮询、随机、加权响应时间和重试等负载均衡策略;而Spring Cloud LoadBalancer则提供轮询、随机及Nacos负载均衡策略,基于Reactor实现,更高效灵活。
54 0
|
3月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
3月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
57 2
|
4月前
|
缓存 负载均衡 Java
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
文章标题为“OpenFeign的Ribbon负载均衡详解”,是继OpenFeign十大可扩展组件讨论之后,深入探讨了Ribbon如何为OpenFeign提供负载均衡能力的详解。
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
|
4月前
|
负载均衡 算法 Java
SpringCloud之Ribbon使用
通过 Ribbon,可以非常便捷的在微服务架构中实现请求负载均衡,提升系统的高可用性和伸缩性。在实际使用中,需要根据实际场景选择合适的负载均衡策略,并对其进行适当配置,以达到更佳的负载均衡效果。
123 13
|
5月前
|
负载均衡 算法 网络协议
Ribbon 负载均衡源码解读
Ribbon 负载均衡源码解读
67 15
Ribbon 负载均衡源码解读
|
3月前
|
负载均衡 Java 开发者
Ribbon框架实现客户端负载均衡的方法与技巧
Ribbon框架为微服务架构中的客户端负载均衡提供了强大的支持。通过简单的配置和集成,开发者可以轻松地在应用中实现服务的发现、选择和负载均衡。适当地使用Ribbon,配合其他Spring Cloud组件,可以有效提升微服务架构的可用性和性能。
48 0