SpringCloud 客户端Ribbon负载均衡的实现方法

 更新时间:2022年06月06日 08:51:45   作者:Juno3550  
Ribbon 是 Netflix 提供的一个基于 Http 和 TCP 的客户端负载均衡工具,且已集成在 Eureka 依赖中,这篇文章主要介绍了SpringCloud 客户端Ribbon负载均衡的实现方法,需要的朋友可以参考下

Ribbon 介绍

Ribbon 是 Netflix 提供的一个基于 Http 和 TCP 的客户端负载均衡工具,且已集成在 Eureka 依赖中。

实现原理:SpringCloud Ribbon 的底层采用了一个拦截器,拦截了 RestTemplate 发出的请求,对地址做了修改。

开启客户端负载均衡,简化 RestTemplate 调用

1)在服务调用者的 RestTemplate 配置类上添加注解:

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced  // 开启客户端负载均衡(默认轮询策略)
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

2)在调用时指定服务名:

package com.controller;
import com.domain.Goods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * 服务调用方
 */
@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/goods/{id}")
    public Goods findOrderByGoodsId(@PathVariable("id") int id) {

        String url = String.format("http://eureka-provider/goods/findOne/%d", id);
        Goods goods = restTemplate.getForObject(url, Goods.class);
        return goods;
    }
}

负载均衡策略

负载均衡策略:

  • 轮询(默认)
  • 随机
  • 最小并发
  • 过滤
  • 响应时间
  • 轮询重试
  • 性能可用性

使用负载均衡:

方式一:使用 bean 的方式

  • 在消费者端配置负载均衡策略 Bean:
package com.config;

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

public class MyRule {

    @Bean
    public IRule rule() {
        return new RandomRule();  // 随机策略
    }

}
  • 在启动类添加注解:
package com;

import com.config.MyRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;

@EnableDiscoveryClient  // 激活DiscoveryClient
@EnableEurekaClient
@SpringBootApplication
@RibbonClient(name="eureka-provider", configuration= MyRule.class)  // 指定服务提供方并配置负载均衡策略
public class ConsumerApp {

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

方式二:使用配置文件

server:
  port: 9000

eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      defaultZone:  http://localhost:8761/eureka

spring:
  application:
    name: eureka-consumer

# 设置 Ribbon 的负载均衡策略:随机策略
EUREKA-PROVIDER:
  ribbon:
    NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule.RandomRule

饥饿加载

Ribbon 默认是采用懒加载,即第一次访问时才会去创建 LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,达到降低第一次访问的耗时。

可以通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true
    clients: userservice

到此这篇关于SpringCloud 客户端Ribbon负载均衡的实现方法的文章就介绍到这了,更多相关SpringCloud  Ribbon负载均衡内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java并发之搞懂读写锁

    Java并发之搞懂读写锁

    这篇文章主要介绍了Java并发之读写锁,文中相关实例代码详细,测试可用,具有一定参考价值,需要的朋友可以了解下,希望能够给你带来帮助
    2021-11-11
  • 本地编译打包项目部署到服务器并且启动方式

    本地编译打包项目部署到服务器并且启动方式

    这篇文章主要介绍了本地编译打包项目部署到服务器并且启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • SpringSecurity自定义Form表单使用方法讲解

    SpringSecurity自定义Form表单使用方法讲解

    这篇文章主要介绍了Spring Security自定义Form表单使用方法,虽然 Spring Security 提供了默认的登录表单,实际项目里肯定是不可以直接使用的,当然 Spring Security 也提供了自定义登录表单的功能
    2023-01-01
  • Java内存分布归纳整理详解

    Java内存分布归纳整理详解

    这篇文章主要介绍了java程序运行时内存分布详解,需要的朋友可以参考下
    2017-04-04
  • Java通过XPath获取XML文件中符合特定条件的节点

    Java通过XPath获取XML文件中符合特定条件的节点

    今天小编就为大家分享一篇关于Java通过XPath获取XML文件中符合特定条件的节点,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • java获取中文拼音首字母的实例

    java获取中文拼音首字母的实例

    下面小编就为大家带来一篇java获取中文拼音首字母的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java实现带有权重随机算法的示例详解

    Java实现带有权重随机算法的示例详解

    这篇文章主要为大家详细介绍了Java如何实现带有权重随机算法,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • Redis内存数据库示例分析

    Redis内存数据库示例分析

    Redis本身的内容比较复杂。如果你上来,你应该研究一个细节点,比如连接池和数据结构。虽然可以直接了解某一点的详细来源内容,甚至尽快解决一些意外,但是容易淹没在失眠的细节中,整体控制不了Redis
    2022-12-12
  • Java线程中start和run方法全面解析

    Java线程中start和run方法全面解析

    这篇文章主要介绍了Java线程中start和run方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • Java Collections集合继承结构图_动力节点Java学院整理

    Java Collections集合继承结构图_动力节点Java学院整理

    这篇文章主要介绍了Java Collections集合继承结构图_动力节点Java学院整理,需要的朋友可以参考下
    2017-04-04

最新评论