SpringCloud 客户端Ribbon负载均衡的实现方法
作者:Juno3550 时间:2023-03-22 16:42:43
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
来源: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