【Spring Cloud Alibaba】Ribbon 负载均衡器

1、Spring Cloud Ribbon

负载均衡有以下几种方式来实现,Spring Cloud OpenFeign 就是默认规则,下面我们会详细分析

  • 默认规则:轮训 RoundRobin
  • 简单轮询负载均衡(RoundRobin)
  • 随机负载均衡 (Random)随机选择 UP 的 Server
  • 加权响应时间负载均衡 WeightedResponseTime
  • 区域感知轮询负载均衡(ZoneAware)

下面这些算法可以直接配置,或者用代码配置,配置的话一般我们用代码可以直接去替换【Spring Cloud Alibaba】Ribbon 负载均衡器

2、构建 Ribbon 服务提供者

创建 spring-cloud-alibaba-ribbon-provider 模块,并注册到 Nacos

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

修改 application.properties 配置文件

server.port=8000
spring.application.name=spring-cloud-alibaba-ribbon-provider
management.server.port=9000
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

# Nacos注册信息
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.namespace=sandbox-configuration

启动类增加注解

@EnableDiscoveryClient

创建一个提供服务的控制层

package cn.tellsea.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * ribbon 测试
 *
 * @author Tellsea
 * @date 2021/12/22
 */

@RestController
public class RibbonController {

    @Value("${server.port}")
    private int port;

    @GetMapping("/ribbon/message/{message}")
    public String message(@PathVariable("message") String message) {
        return "[端口:]" + port + ",消息:" + message;
    }
}

启动服务访问

http://localhost:8000/ribbon/message/Tellsea

返回结果

[端口:]8000,消息:Tellsea

到此,第一个服务提供者创建完成了,下面创建第二个服务提供者,这里我们使用 IDEA 提供的快捷方式配置,主要是复制启动方式,修改相关端口即可

【Spring Cloud Alibaba】Ribbon 负载均衡器复制之后,编辑生成的 SpringCloudAlibabaRibbonProviderApplication(1)修改为 SpringCloudAlibabaRibbonProviderApplication2,然后修改端口

-Dserver.port=8001 -Dmanagement.server.port=9001

【Spring Cloud Alibaba】Ribbon 负载均衡器保存之后启动,就有同一个服务,两个实例了, 检查 Nacos 的配置

【Spring Cloud Alibaba】Ribbon 负载均衡器浏览器分别访问两个服务提供者,OK 没问题

【Spring Cloud Alibaba】Ribbon 负载均衡器

3、构建 Ribbon 服务消费者

创建 spring-cloud-alibaba-ribbon-consumer 模块,依赖就多了一个 OpenFeign,同样的注册到 Nacos

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

修改 application.properties 配置文件

server.port=8002
spring.application.name=spring-cloud-alibaba-ribbon-consumer
management.server.port=9002
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

# Nacos注册信息
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.namespace=sandbox-configuration

启动类增加注解

@EnableDiscoveryClient
@EnableFeignClients

远程调用 OpenFeign 的接口

package cn.tellsea.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @author Tellsea
 * @date 2021/12/22
 */

@FeignClient("spring-cloud-alibaba-ribbon-provider")
public interface RibbonService {

    /**
     * 远程方法
     *
     * @param message
     * @return
     */

    @GetMapping("/ribbon/message/{message}")
    String message(@PathVariable("message") String message);
}

测试使用的控制层方法

package cn.tellsea.controller;

import cn.tellsea.service.RibbonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * Spring Cloud OpenFeign 远程调用
 *
 * @author Tellsea
 * @date 2021/12/22
 */

@RestController
public class OpenFeignController {

    @Autowired
    private RibbonService ribbonService;

    @GetMapping("/feign/ribbon/message/{message}")
    public String feignEcho(@PathVariable String message) {
        return ribbonService.message(message);
    }
}

然后启动服务,检查 Nacos 是否注册完成,现在有个一个消费者,两个服务提供者

【Spring Cloud Alibaba】Ribbon 负载均衡器
在这里插入图片描述

4、OpenFeign 默认负载方法

疯狂请求测试接口

http://localhost:8000/ribbon/message/Tellsea

发现每次都是轮询调用的,证实了默认使用的方式是轮询。文章头部说明了还有哪些负载方式,剩下的就是各种方式根据实际业务配置即可【Spring Cloud Alibaba】Ribbon 负载均衡器

微信公众号


原文始发于微信公众号(花海里):【Spring Cloud Alibaba】Ribbon 负载均衡器

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69481.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!