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

作者:Juno3550 时间:2023-03-22 16:42:43 

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

来源:https://www.cnblogs.com/juno3550/p/16342727.html

标签:SpringCloud,Ribbon,负载均衡
0
投稿

猜你喜欢

  • 浅谈java异常链与异常丢失

    2023-10-24 21:53:38
  • startActivityForResult和setResult案例详解

    2023-09-15 19:13:33
  • Lombok使用@Tolerate实现冲突兼容问题

    2021-06-27 06:50:55
  • android实现okHttp的get和post请求的简单封装与使用

    2023-10-06 04:20:25
  • Android使用插件实现代码混淆

    2023-02-25 07:13:10
  • Java构造代码块,静态代码块原理与用法实例分析

    2023-11-03 09:03:45
  • Android如何从实现到封装一个MVP详解

    2023-02-12 10:44:40
  • SpringCloud 搭建企业级开发框架之实现多租户多平台短信通知服务(微服务实战)

    2022-12-04 13:22:53
  • Java运算符从见过到掌握下

    2023-01-29 15:47:19
  • Java Structs框架原理案例详解

    2023-12-11 16:46:22
  • Android Studio中debug功能详解

    2022-05-22 08:16:01
  • java Lambda表达式的使用心得

    2023-08-18 05:59:51
  • java实现马踏棋盘算法(骑士周游问题)

    2022-03-17 20:29:46
  • Java实现简易界面通讯录

    2023-02-09 20:12:59
  • springMVC前台传数组类型,后台用list类型接收实例代码

    2022-12-25 16:39:40
  • Java 中泛型 T 和 ? 的区别详解

    2022-07-08 00:40:28
  • 再谈异常处理try catch finally

    2021-11-12 11:17:31
  • 详解C# Socket异步通信实例

    2022-08-27 14:27:22
  • java实现小球碰撞功能

    2023-04-05 19:22:41
  • springboot实用配置详细图文教程

    2023-12-07 00:36:43
  • asp之家 软件编程 m.aspxhome.com