Spring Cloud Ribbon实现客户端负载均衡

1、构建microservice-consumer-movie-ribbon项目,在pom.xml中引入ribbon依赖

  在引入Eureka依赖的时候,默认里面含有ribbon依赖

2、添加@LoadBalanced注解,实现负载均衡

  ribbon负载均衡策略默认为轮循方式

@SpringBootApplication
@EnableEurekaClientpublic class ConsumeMovieRibbonApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumeMovieRibbonApplication.class, args);
    }
    @Bean
    @LoadBalanced  //客户端负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

3、自定义负载均衡策略

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
/**
 * @Configuration注解不能放在@SpringBootApplication所在的包下 * 如果放在此包下,默认全部负载均衡使用此策略
 * */
@Configuration
@ExcludeFromComponentScan
public class TestConfiguration {

    /**
     * 设置负载均衡的规则为随机
     * */
    @Bean
    public IRule ribbonRule() {
        return new RandomRule();
    }
}

4、指定对那个客户端使用自定义负载均衡

@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "microservice-provider-user", configuration = TestConfiguration.class)
public class ConsumeMovieRibbonApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumeMovieRibbonApplication.class, args);
    }
    @Bean
    @LoadBalanced  //客户端负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

5、如果@Configuration注解放在@SpringBootApplication所在的包下

  a、在@Configuration包下创建ExcludeFromComponentScan注解

package com.wyl.microservicesimpleconsumemovie;
public @interface ExcludeFromComponentScan {
}

  b、在入口类中排除此注解不扫描

package com.wyl.microservicesimpleconsumemovie;
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "microservice-provider-user", configuration = TestConfiguration.class)
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type=FilterType.ANNOTATION,value=ExcludeFromComponentScan.class)})
public class ConsumeMovieRibbonApplication {
  ...
}

  c、在TestConfiguration中使用此注解

/**
 * @Configuration注解不能放在@SpringBootApplication所在的包及其子包下
 * */
@Configuration
@ExcludeFromComponentScan
public class TestConfiguration {
    /**
     * 设置负载均衡的规则为随机
     * */
    @Bean
    public IRule ribbonRule() {
        return new RandomRule();
    }
}

6、开启多个microservice-provider-user微服务,测试结果

负载均衡的结果:

111:microservice-provider-user:192.168.1.39:7900
222:microservice-provider-user2:192.168.1.39:7903
111:microservice-provider-user:192.168.1.39:7900
222:microservice-provider-user2:192.168.1.39:7902
111:microservice-provider-user:192.168.1.39:7901
222:microservice-provider-user2:192.168.1.39:7903
111:microservice-provider-user:192.168.1.39:7900
222:microservice-provider-user2:192.168.1.39:7902
111:microservice-provider-user:192.168.1.39:7901
222:microservice-provider-user2:192.168.1.39:7903
111:microservice-provider-user:192.168.1.39:7901
222:microservice-provider-user2:192.168.1.39:7902
111:microservice-provider-user:192.168.1.39:7900
222:microservice-provider-user2:192.168.1.39:7903
111:microservice-provider-user:192.168.1.39:7900
222:microservice-provider-user2:192.168.1.39:7902
microservice-provider-user采用自定义的随机负载均衡,而microservice-provider-user2采用ribbon默认的轮循方式6、完整代码参见https://i.cnblogs.com/Files.aspx中microservice-spring-cloud-ribbon文件
时间: 2024-08-19 03:18:57

Spring Cloud Ribbon实现客户端负载均衡的相关文章

撸一撸Spring Cloud Ribbon的原理-负载均衡策略

在前两篇<撸一撸Spring Cloud Ribbon的原理>,<撸一撸Spring Cloud Ribbon的原理-负载均衡器>中,整理了Ribbon如何通过负载均衡拦截器植入RestTemplate,以及调用负载均衡器获取服务列表,如何过滤,如何更新等的处理过程. 因为,负载均衡器最终是调用负载均衡策略的choose方法来选择一个服务,所以这一篇,整理Ribbon的负载均衡策略. 策略类 RandomRule RoundRobinRule RetryRule WeightedR

Spring Cloud(十四):Ribbon实现客户端负载均衡及其实现原理介绍

年后到现在一直很忙,都没什么时间记录东西了,其实之前工作中积累了很多知识点,一直都堆在备忘录里,只是因为近几个月经历了一些事情,没有太多的经历来写了,但是一些重要的东西,我还是希望能坚持记录下来.正好最近公司用到了一些本篇文章的知识点,所以就抽空记录一下. 本文代码github地址:https://github.com/shaweiwei/RibbonTest/tree/master 简介 ribbon 是一个客户端负载均衡器,它和nginx的负载均衡相比,区别是一个是客户端负载均衡,一个是服务

Spring Cloud 客服端负载均衡 Ribbon

一.简介   Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中.包括前面的提供的声明式服务调用也是基于该Ribbon实现的.理解Ribbon对于我们使用Spring Cloud来讲非常的重要,因为负载均衡是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段之一.在上节的例子中,我们采用了声明式的方式来实现负载均衡.实际

2.【Spring Cloud Alibaba】实现负载均衡-Ribbon

负载均衡的两种方式 如何实现负载均衡 目前已经实现让A总能找到B,如何实现负载均衡 负载均衡的两种方式 服务器端负载均衡 客户端负载均衡 使用Ribbo实现负载均衡 Ribbon是什么 ==Netflix开源的客户端侧负载均衡器== 引入Ribbon后的架构演进 整合Ribbon实现负载均衡 // 在spring容器中,创建一个对象,类型RestTemplate:名称/ID是:restTemplate // <bean id="restTemplate" class="

【Spring Cloud学习之三】负载均衡

环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 主流的负载均衡技术有nginx.LVS.HAproxy.F5,Spring Cloud使用ribbon. 一.ribbonribbon是一个负载均衡客户端 类似nginx反向代理,可以很好的控制http和tcp的一些行为.Feign默认集成了ribbon. 二.案例 1.修改上一篇的service-member的controller package com.wjy.controll

Spring Cloud ---- 服务消费与负载均衡(feign)

feign是一个声明式的伪客户端,只需要创建一个接口并且注解,它具有可插拔的特性.feign集合了Ribbon,再与Eurake结合实现服务的注册发现与负载均衡.结合Hystrix,具有熔断功能. 1.使用步骤首先引入feign,eureka, hystrix的jar包 2.启动两次服务提供者 3.配置文件声明注册中心地址,声明端口号,服务名 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ spring

Ribbon使用及其客户端负载均衡实现原理分析

1.ribbon负载均衡测试 (1)consumer工程添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>com.squareup

SpringCloud开发学习总结(四)—— 客户端负载均衡Ribbon

通过上一章<SpringCloud开发学习总结(三)-- 服务治理Eureka>,我们已经搭建起微服务架构中的核心组件--服务注册中心(包括单点模式和高可用模式).同时还注册了一个服务,命名为hello-service.现在我们已经有了服务注册中心和服务提供者,下面就来尝试构建一个服务消费者,它主要完成两个目标,发现服务以及消费服务.其中,服务发现的任务由Eureka的客户端完成,而服务消费的任务由Ribbon完成.Ribbon是一个基于HTTP和TCP的客户端负载均衡器,它可以在通过客户端中

Greenwich.SR2版本的Spring Cloud Ribbon实例

上次我们了解了eureka(参见Greenwich.SR2版本的Spring Cloud Eureka实例),里面的服务消费方我们其实已经用到了ribbon.在pom里我们引入了 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency&