使用springCloud构建微服务实现——客户端测负载均衡(自定义负载均衡策略)

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 使用springCloud构建微服务实现——客户端测负载均衡(自定义负载均衡策略)

一、前期准备

先创建一个注册中心,一个消费者服务,一个生产者服务,由于之前写过,这里不多写了,请参考前面的博文。

使用springCloud构建微服务实战:https://blog.csdn.net/jiankang66/article/details/90084845

二、本篇主题

在生产环境中,各个微服务都会部署多个实例,服务消费者需要将请求分摊到多个服务提供者上,在微服务中,当Ribbon与Eureka配合使用时,Ribbon可基于某种算法,自动地帮助消费者去请求,因为feginClient已经默认使用了Ribbon,只需要引入fegin的依赖就可以了。


1、在上篇的基础上,我们新建一个与上一个provider生产者一样的服务,只是端口号不一样,应用名与上一个一致。这时候,我们有了以下的服务:


(1)一个注册中心


(2)两个生产者


(3)一个消费者


2、在两个生产者中写同样的Controller,但是打印的日志不一样。


(1)provider1中的Controller方法为:

@RestController
public class TestController {
    //打印日志的属性
    private static final Logger LOGGER= LoggerFactory.getLogger(TestController.class);
    @RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam ("count") int count){
        LOGGER.debug("provider1第{}次访问",count);
        return "1111111111111111111";
    }
}

(2)provider2中Controller的方法与provider1一样,这是打印的日志不一样。

@RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam("count") int count){
        LOGGER.info("provider2第{}次访问",count);
        return "222";
    }

3、对消费者进行操作

(1)在Controller中添加一个测试的方法,该方法循环调用十次生产者的方法。

 @RequestMapping("/mcount")
    public String count(){
        for(int i=1;i<11;i++){
           schedualServiceHi.count(i);
        }
        return "负载均衡完成!";
    }

(2)在SchedualServiceHi接口中添加调用生产者的方法。

@FeignClient(name= "myprovider",fallback = TestFeignImpl.class)
public interface SchedualServiceHi {
    @RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam("count") int count);
}

三、效果展示

1、将所有项目运行,打开浏览器请求消费者中mcount的方法。

查看两个provider的打印日志,如下:

(1)provider1的打印日志:

image.png

(2)provider2的打印日志:

image.png

从中可以看出这十次是轮询访问所有生产者的,实现了负载均衡。

四、对负载均衡策略实现自定义

1、引入springCloud的ribbon依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2、在配置类中设置策略方法

Ribbon的核心组件是IRule,是所有负载均衡算法的父接口,他的每一个子类都是一种负载均衡算法。例如:

(1)RoundRobinRule 轮询

(2)RandomRule 随机

上一步结果是默认的策略轮询。

3、修改策略时,配置类代码如下:设置为随机策略.

@Configuration
public class ConfigBeans {
    @Bean
    public IRule myRule(){
        return new RandomRule();
    }
}

4、结果展示

(1)provider1的日志:

image.png

(2)provider2的日志:

image.png

可以很容易看出,结果是随机访问生产者的。

五、总结

通过以上操作,我们实现了微服务负载均衡的功能,

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
21天前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
47 1
|
21天前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
90 0
|
21天前
|
Dubbo Java 应用服务中间件
💥Spring Cloud Dubbo火爆来袭!微服务通信的终极利器,你知道它有多强大吗?🔥
【8月更文挑战第29天】随着信息技术的发展,微服务架构成为企业应用开发的主流模式,而高效的微服务通信至关重要。Spring Cloud Dubbo通过整合Dubbo与Spring Cloud的优势,提供高性能RPC通信及丰富的生态支持,包括服务注册与发现、负载均衡和容错机制等,简化了服务调用管理并支持多种通信协议,提升了系统的可伸缩性和稳定性,成为微服务通信领域的优选方案。开发者仅需关注业务逻辑,而无需过多关心底层通信细节,使得Spring Cloud Dubbo在未来微服务开发中将更加受到青睐。
45 0
|
6天前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
11天前
|
前端开发 Java UED
"揭秘!如何以戏剧性姿态,利用SpringCloud铸就无懈可击的异常处理铁壁,让你的微服务架构稳如泰山,震撼业界!"
【9月更文挑战第8天】随着微服务架构的普及,Spring Cloud作为一套完整的微服务解决方案被广泛应用。在微服务架构中,服务间调用频繁且复杂,异常处理成为保障系统稳定性和用户体验的关键。传统的异常处理方式导致代码冗余,降低系统可维护性和一致性。因此,基于Spring Cloud封装统一的异常处理机制至关重要。这样不仅可以减少代码冗余、提升一致性,还增强了系统的可维护性,并通过统一的错误响应格式优化了用户体验。具体实现包括定义全局异常处理器、自定义业务异常以及在服务中抛出这些异常。这种方式体现了微服务架构中的“服务治理”和“契约先行”原则,有助于构建健壮、可扩展的系统。
27 2
|
1月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
1月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
WXM
|
1月前
|
存储 缓存 Java
|
19天前
|
Java 微服务 Spring
驾驭复杂性:Spring Cloud在微服务构建中的决胜法则
【8月更文挑战第31天】Spring Cloud是在Spring Framework基础上打造的微服务解决方案,提供服务发现、配置管理、消息路由等功能,适用于构建复杂的微服务架构。本文介绍如何利用Spring Cloud搭建微服务,包括Eureka服务发现、Config Server配置管理和Zuul API网关等组件的配置与使用。通过Spring Cloud,可实现快速开发、自动化配置,并提升系统的伸缩性和容错性,尽管仍需面对分布式事务等挑战,但其强大的社区支持有助于解决问题。
31 0