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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
7月前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
656 126
|
7月前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
424 0
|
7月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
8月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
486 1
|
8月前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
954 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
8月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
682 0
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
850 6
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
445 1
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2