SpringCloud微服务框架03 - Ribbon负载均衡

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: SpringCloud微服务框架03 - Ribbon负载均衡

本系列持续更新中


SpringCloud微服务框架01-SpringCloud简介

SpringCloud微服务框架02-Eureka服务注册与发现

SpringCloud微服务框架03 - Ribbon负载均衡

SpringCloud微服务框架04 - Config统一配置中心


文章中设计到的项目源码,会逐步整理到github上。github除了本系列文章设计到的源码信息,还有Spring Cloud整合的项目框架。有同样正在学习Spring Cloud的小伙伴可以加我一起学习交流。


github地址:https://github.com/hack-feng/maple-cloud


本文基于SpringCloud微服务框架2-Eureka服务注册与发现继续编写。


1、Ribbon的概念


Ribbon是一个客户端负载均衡器,它可以很好的控制HTTP和TCP客户端的行为。Feign已经使用Ribbon,所以如果您使用@FeignClient,则本篇也适用。


Ribbon中的中心概念是指定客户端的概念。每个负载均衡器都是这个组件的一部分,它们一起工作来连接到服务器,


并且它们全体都有一个给定的名字。


SpringCloud使用RibbonClientConfguration在ApplicationContext中创建一个新的全体,这包含ILoadBalancer,RestClient和ServerListFilter。


2、Ribbon使用


基于SpringCloud微服务框架2-Eureka服务注册与发现一文。

2.1 maple-eureka-client中pom.xml引用Ribbon依赖

<!-- 负载均衡 --> 
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2.2 添加一个MyLoadBalanceConfig.java配置类。用于自定义配置Ribbon。

public class MyLoadBalanceConfig {
    @Bean
    public IRule ribbonRule() { // 其中IRule就是所有规则的标准
        return new com.netflix.loadbalancer.RandomRule() ;
    }
}

2.3 修改MapleEurekaClientApplication.java主加载类。


添加@RibbonClient(name = "ribbonClient", configuration = MyLoadBalanceConfig.class)用于加载Ribbon自定义的配置。


@EnableDiscoveryClient
@SpringBootApplication
@RibbonClient(name = "ribbonClient", configuration = MyLoadBalanceConfig.class)
public class MapleEurekaClientApplication {
  public static void main(String[] args) {
    SpringApplication.run(MapleEurekaClientApplication.class, args);
  }
}

2.4 在TemplateConfig.java添加@LoadBalanced注解。

@Configuration
public class TemplateConfig {
    @Bean
    @LoadBalanced //负载均衡
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);
    }
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(15000);//ms
        factory.setConnectTimeout(15000);//ms
        return factory;
    } 
}


2.5 创建测试类DemoController.java

@RestController
@RequestMapping("/demo")
public class DemoController {
    //调用在Eureka注册的实例,对应调用的spring.application.name,不区分大小写
    private String PROVIDER_URL = "http://MAPLE-PROVIDER";
    @Autowired
    private RestTemplate restTemplate; 
    @RequestMapping(value = "/test")
    public @ResponseBody void test(){
        //循环10次,模拟调用十次
        for (int i = 0; i < 10; i++) {
            String res = restTemplate.getForEntity(PROVIDER_URL + "/demo/providerDemo" , String.class).getBody();
            System.out.println(res);
        }
    }
}


3、测试Ribbon负载均衡调用


基于SpringCloud微服务框架2-Eureka服务注册与发现中maple-eureka-provider项目,创建一个新的项目maple-eureka-provider2

application.properties配置文件如下

server.port=8088
spring.application.name=maple-provider
eureka.client.service-url.defaultZone=http://admin:admin123@master:1111/eureka/

注意spring.application.name=maple-provider要和maple-eureka-provider一致

maple-eureka-provider如果不一致,默认是两个不同的实例。


修改ProviderDemoController.java的返回数据。

@RestController
@RequestMapping("/demo")
public class ProviderDemoController {
    @RequestMapping(value = "/providerDemo")
    @ResponseBody
    public String providerDemo(){
            return "这是项目《maple-eureka-provider2》ProviderDemo的数据";
    }
}

maple-eureka-provider的ProviderDemoController.java为

@RestController
@RequestMapping("/demo")
public class ProviderDemoController {
  @RequestMapping(value = "/providerDemo")
  @ResponseBody
  public String providerDemo(){
    return "这是项目《maple-eureka-provider》ProviderDemo的数据";
  }
}


然后启动:maple-eureka-service、maple-eureka-provider、maple-eureka-provider2、maple-eureka-client项目


在浏览器调用http://127.0.0.1:8065/demo/test.do


console打印数据如下


20190408154908484.png

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
1月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
58 2
|
15天前
|
负载均衡 监控 网络协议
SpringCloud之Ribbon使用
通过以上步骤,就可以在Spring Cloud项目中有效地使用Ribbon来实现服务调用的负载均衡,提高系统的可靠性和性能。在实际应用中,根据具体的业务场景和需求选择合适的负载均衡策略,并进行相应的配置和优化,以确保系统的稳定运行。
40 15
|
15天前
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
37 5
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
1月前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
87 1
|
1月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
1月前
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
64 0
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
3月前
|
负载均衡 算法 Java
SpringCloud之Ribbon使用
通过 Ribbon,可以非常便捷的在微服务架构中实现请求负载均衡,提升系统的高可用性和伸缩性。在实际使用中,需要根据实际场景选择合适的负载均衡策略,并对其进行适当配置,以达到更佳的负载均衡效果。
68 13
|
5月前
|
负载均衡 算法 Java
Spring Cloud Netflix 之 Ribbon
Spring Cloud Netflix Ribbon是客户端负载均衡器,用于在微服务架构中分发请求。它与RestTemplate结合,自动在服务发现(如Eureka)注册的服务之间进行调用。配置包括在pom.xml中添加依赖,设置application.yml以连接Eureka服务器,并在配置类中创建@LoadBalanced的RestTemplate。通过这种方式,当调用如`/user/userInfoList`的接口时,Ribbon会自动处理到多个可用服务实例的负载均衡。
下一篇
无影云桌面