首页 > 编程语言 > 详细

Springcloud学习(二)——Ribbon

时间:2020-04-12 11:50:29      阅读:62      评论:0      收藏:0      [点我收藏+]

一、负载均衡

  创建ribbon-consumer

  pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springCloud-demo</artifactId>
        <groupId>com.badcat</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.badcat</groupId>
    <artifactId>ribbon-consumer</artifactId>
    <packaging>jar</packaging>
    <name>ribbon-consumer</name>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>

    </dependencies>
</project>

  application.properties

spring.application.name=ribbon-consumer
server.port=31000

eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/

  启动类(注意@LoadBalanced)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @author badcat
 * @date 2020-03-01 15:42
 */
@SpringBootApplication
@EnableDiscoveryClient
public class RibbonConsumerApplication {

    @Bean
    @LoadBalanced
    public RestTemplate template(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }

}

  controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author badcat
 * @date 2020-04-12 1:20
 */
@RestController
public class Controller {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/sayHi")
    public String sayHi(){
        return restTemplate.getForObject("http://eureka-client/sayHi",String.class);
    }

}

  创建两个spring.application.name相同的服务eureka-client、eureka-client2,端口被分别是30000、30001,配置略,参考上一篇eureka-client的配置

  启动注册中心、eureka-client、eureka-client2、ribbon-consumer,打开注册中心页面,如图,说明eureka-client是集群了。

       技术分享图片

 

  多次调用ribbon-consumer的sayHi 接口,查看结果,30000和30001交替返回,说明ribbon的负载均衡成功

        技术分享图片

        技术分享图片

 

二、负载均衡策略

  上一步骤中的轮询策略实际上是轮询。

 

  1、全局负载均衡策略修改,就是ribbon访问任何一个服务集群时都遵循的策略

  我们改成随机策略,在ribbon-consumer模块中新建一个类,启动该模块,多次调用接口,发现返回的没有规律。

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author badcat
 * @date 2020-04-12 2:26
 */
@Configuration
public class RibbonConfiguration {

    @Bean
    public IRule defaultLBDStrategy(){
        return new RandomRule();
    }

}

  2、局部负载均衡策略修改,就是可以对不同的服务集群做不同的策略配置

  第一种方式,修改application.properties,添加如下配置

#针对eureka-client服务集群的负载均衡策略的配置
eureka-client.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

  第二种方式,添加注解@RibbonClient。注解优先级高于配置文件

import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Configuration;

/**
 * @author badcat
 * @date 2020-04-12 2:26
 */
@Configuration
@RibbonClient(name = "eureka-client", configuration = com.netflix.loadbalancer.RandomRule.class)
public class RibbonConfiguration {



}

 

Springcloud学习(二)——Ribbon

原文:https://www.cnblogs.com/hmxs/p/12684084.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!