Ribbon 介绍

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

1)客户端负载均衡:

  • 负载均衡算法在客户端

  • 客户端维护服务地址列表

2)服务端负载均衡:

  • 负载均衡算法在服务端
  • 由负载均衡器维护服务地址列表

开启客户端负载均衡,简化 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

SpringCloud 客户端负载均衡:Ribbon的更多相关文章

  1. 客户端负载均衡Ribbon

    客户端负载均衡Ribbon 一.Ribbon是什么 二.Ribbon实现客户端负载均衡 三.Ribbon负载均衡策略 四.Rest请求模板类解读 4.1 RestTemplate的GET请求 第一种: ...

  2. SpringCloud开发学习总结(四)—— 客户端负载均衡Ribbon

    通过上一章<SpringCloud开发学习总结(三)—— 服务治理Eureka>,我们已经搭建起微服务架构中的核心组件——服务注册中心(包括单点模式和高可用模式).同时还注册了一个服务,命 ...

  3. 【springcloud】客户端负载均衡(Ribbon)

    转自:https://blog.csdn.net/pengjunlee/article/details/86594934 服务器端负载均衡负载均衡是我们处理高并发.缓解网络压力和进行服务器扩容的重要手 ...

  4. 五、springcloud之客户端负载均衡Ribbon

    一.简介 在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式: 一种是ribbon+restTemplate, ...

  5. 客户端负载均衡Ribbon之二:Loadbalance的源码

    Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 像nginx可以使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡 ...

  6. 服务注册发现Eureka之三:Spring Cloud Ribbon实现客户端负载均衡(客户端负载均衡Ribbon之三:使用Ribbon实现客户端的均衡负载)

    在使用RestTemplate来消费spring boot的Restful服务示例中,我们提到,调用spring boot服务的时候,需要将服务的URL写死或者是写在配置文件中,但这两种方式,无论哪一 ...

  7. 0403-服务注册与发现-客户端负载均衡-Ribbon的基本使用

    一.概述 问题1.上一篇文章已说明如何注册微服务,但是调用方如何调用,以及如何防止硬编码.即电影微服务调用用户微服务 问题2.用户微服务多个节点,调用服务方如何负载均衡 二.实现负载均衡方式 2.1. ...

  8. 客户端负载均衡Ribbon之源码解析

    什么是负载均衡器? 假设有一个分布式系统,该系统由在不同计算机上运行的许多服务组成.但是,当用户数量很大时,通常会为服务创建多个副本.每个副本都在另一台计算机上运行.此时,出现 "Load ...

  9. Spring Cloud第四篇 | 客户端负载均衡Ribbon

    ​ 本文是Spring Cloud专栏的第四篇文章,了解前三篇文章内容有助于更好的理解本文: ​Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...

随机推荐

  1. CCF201609-2火车购票

    问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...

  2. js手机端判断滑动还是点击

    网上的代码杂七杂八,  我搞个简单明了的!!  你们直接复制粘贴,  手机上 电脑上 可以直接测试!!! 上图: 上代码: <!DOCTYPE html> <html lang=&q ...

  3. apache开启图片缓存压缩

    ①-浏览器缓存图片信息 开启Apache的expires模块,重启Apache 2.在虚拟主机的配置文件里面,增加对图片信息缓存的配置,重启Apache 3.在网站目录里面填写测试代码 4.测试效果 ...

  4. 学生管理系统 C++课设

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> u ...

  5. numpy教程03---ndarray的运算

    欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...

  6. MongoDB 提供的工具

    MongoDB 提供的工具 官网 https://www.mongodb.com/ 工具 MongoDB 提供了一些工具,: MongoDB Compass: MongoDB数据库可视化工具(类似PL ...

  7. Go 1.18泛型的局限性初探

    前言 Go 1.18 版本之后正式引入泛型,它被称作类型参数(type parameters),本文初步介绍 Go 中泛型的使用.长期以来 go 都没有泛型的概念,只有接口 interface 偶尔类 ...

  8. 『忘了再学』Shell基础 — 8、管道符介绍

    我们之前已经有文章说过管道符了,今天这里再简单总结一下用法. 1.行提取命令grep grep命令的作用,是在指定的文件中,搜索符合条件的字符串. 命令格式: [root@localhost ~ ] ...

  9. HCIE-SEC笔记-EVENG模拟器安装

    EVEng模拟器安装: 准备:Vmware 16.0 EVEng EVE-NG-Win-Client-Pack.exe [抓包,内置wireshark,内置vnc,用来打开windows系统] Win ...

  10. mmdetection训练出现nan

    训练出现nan 在使用MMDetection训练模型时,发现打印信息中出现了很多nan.现象是,loss在正常训练下降的过程中,突然变为nan. 梯度裁减 在模型配置中加上grad_clip: opt ...