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

简介: 使用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

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

五、总结

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
6月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
6月前
|
人工智能 负载均衡 Cloud Native
云原生之负载均衡策略
ai必学之负载均衡 @[TOC]轮询处理;weight权重;ip_hash
|
11月前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
2400 11
架构学习:7种负载均衡算法策略
|
11月前
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
624 9
SpringBoot整合XXL-JOB【04】-  以GLUE模式运行与执行器负载均衡策略
|
负载均衡 Java 持续交付
深入解析微服务架构中的服务发现与负载均衡
深入解析微服务架构中的服务发现与负载均衡
679 7
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
负载均衡 Java Nacos
常见的Ribbon/Spring LoadBalancer的负载均衡策略
自SpringCloud 2020版起,Ribbon被弃用,转而使用Spring Cloud LoadBalancer。Ribbon支持轮询、随机、加权响应时间和重试等负载均衡策略;而Spring Cloud LoadBalancer则提供轮询、随机及Nacos负载均衡策略,基于Reactor实现,更高效灵活。
779 0
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
9月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
10月前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
3536 2

热门文章

最新文章