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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
负载均衡 Java Nacos
Ribbon负载均衡
Ribbon负载均衡
42 1
Ribbon负载均衡
|
3月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
215 3
|
2月前
|
负载均衡 监控 网络协议
SpringCloud之Ribbon使用
通过以上步骤,就可以在Spring Cloud项目中有效地使用Ribbon来实现服务调用的负载均衡,提高系统的可靠性和性能。在实际应用中,根据具体的业务场景和需求选择合适的负载均衡策略,并进行相应的配置和优化,以确保系统的稳定运行。
122 15
|
2月前
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
162 5
|
1月前
|
负载均衡 Java Nacos
常见的Ribbon/Spring LoadBalancer的负载均衡策略
自SpringCloud 2020版起,Ribbon被弃用,转而使用Spring Cloud LoadBalancer。Ribbon支持轮询、随机、加权响应时间和重试等负载均衡策略;而Spring Cloud LoadBalancer则提供轮询、随机及Nacos负载均衡策略,基于Reactor实现,更高效灵活。
131 0
|
2月前
|
分布式计算 Java 持续交付
如何选择合适的微服务框架
如何选择合适的微服务框架
49 0
|
3月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
4月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
4月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
71 2
|
4月前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
141 5