Spring Cloud - Spring Cloud 负载均衡(Ribbon 负载均衡概述、Ribbon 使用)

一、Ribbon 负载均衡概述

  • Ribbon 是 Spring Cloud 提供的一种负载均衡解决方案,Ribbon 是 Netflix 发布的负载均衡器,Spring Cloud 对其进行了封装,形成了 Spring Cloud Ribbon

  • Ribbon 的使用同样需要结合 Eureka Server

  • 负载均衡算法:轮询、随机、加权轮询、加权随机


二、Ribbon 使用

1、具体实现
(1)配置工程
  • 创建子工程(Module),在 pom.xml 文件中配置相关依赖
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloudTest</artifactId>
        <groupId>com.my</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Ribbon</artifactId>

    <!-- Eureka Client -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
    
</project>
(2)配置文件
  • 在 resources 目录下创建并配置 application.yaml 文件
yaml 复制代码
server:
  port: 8040
spring:
  application:
    name: ribbon
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true
(3)Config
  • 创建 MyConfig 配置类,将 RestTemplate 对象注入到 IoC 容器中,并实现负载均衡
java 复制代码
package com.my.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class Myconfig {

    @Bean

    // 添加负载均衡注解
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
(4)Controller
  • 创建 RibbonHandler 类
java 复制代码
package com.my.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/ribbon")
public class RibbonHandler {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/test")
    public String test() {
        return restTemplate.getForObject("http://ServerConsumer/consumer//zuulLoadBalancingTest", String.class);
    }
}
(5)启动类
  • 创建启动类
java 复制代码
package com.my;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RibbonApplication {
    public static void main(String[] args) {
        SpringApplication.run(RibbonApplication.class, args);
    }
}
2、测试
  1. 依次启动注册中心,服务提供者,服务消费者(第一个启动类),Ribbon

  2. 修改服务消费者的配置文件(application.yaml)

    • 将 server.port: 8020 修改为 server.port: 8021
  3. 再次启动一个服务消费者(使用第二个启动类)

  4. 使用 Postman 测试,多次访问,观察端口号的变化

相关推荐
lichong95118 小时前
RelativeLayout 根布局里有一个子布局预期一直展示,但子布局RelativeLayout被 覆盖了
android·java·前端
我家领养了个白胖胖18 小时前
arthas 我愿称为最强辅助工具
java·后端
hongweihao18 小时前
有了AI之后我一天要上三五个服务。自建项目模板 Maven archetype 减轻工作量
java·spring·maven
今天也很困18 小时前
Samba 配置详解
后端
进击的野人19 小时前
Node.js文件系统(fs模块)深度解析与实践应用
后端·正则表达式·node.js
hero_heart19 小时前
MFC Ribbon拾遗
ribbon
muxin-始终如一19 小时前
Semaphore 使用及原理详解
java·开发语言·python
前端fighter19 小时前
全栈项目:旅游攻略系统
前端·后端·源码
小周在成长19 小时前
Java 面相对象继承(Inheritance)指南
后端