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

网友投稿 369 2022-07-26


目录Ribbon 介绍开启客户端负载均衡,简化 RestTemplate 调用负载均衡策略饥饿加载

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在项目中直接使用hystrix的流程分析(hystrix return)
下一篇:Spring myBatis数据库连接异常问题及解决
相关文章

 发表评论

暂时没有评论,来抢沙发吧~