服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringCloud 客户端Ribbon负载均衡的实现方法

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

2023-02-14 14:57Juno3550 Java教程

Ribbon 是 Netflix 提供的一个基于 Http 和 TCP 的客户端负载均衡工具,且已集成在 Eureka 依赖中,这篇文章主要介绍了SpringCloud 客户端Ribbon负载均衡的实现方法,需要的朋友可以参考下

Ribbon 介绍

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

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

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

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

 

开启客户端负载均衡,简化 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负载均衡内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/juno3550/p/16342727.html

延伸 · 阅读

精彩推荐