当前位置: 首页 > news >正文

SpringCloud 之 Ribbon

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。
主要的作用就是实现服务调用的负载均衡,减少各个服务的压力。
但是一般我们会选择使用 Feign,因为 Feign 包含了 Ribbon,使用起来也更加简单,Ribbon 更多的是用来学习。

1.引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2.结合 RestTemplate 进行调用

启动器:

@EnableDiscoveryClient
@SpringBootApplication
public class RibbonDemoApplication {

    /**
     * @LoadBalanced 对 RestTemplate 启用 ribbon 负载均衡
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    /**
     * 指定负载均衡的策略
     * 默认为 ZoneAvoidanceRule,可不写
     * @return
     */
    @Bean
    public IRule myRule() {
        return new RoundRobinRule(); // 显式的指定使用轮询算法
    }

    public static void main(String[] args) {
        SpringApplication.run(RibbonDemoApplication.class, args);
    }
}

@LoadBalanced:目的是让 RestTemplate 调用时使用 Ribbon 进行负载均衡

同时我们也可根据自己的需要修改负载均衡所使用的规则

  • RoundRobinRule:轮询
  • RandomRule:随机
  • AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,以及并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;
  • WeightedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越大,被选中的机率越高刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够时,会切换到 WeightedResponseTimeRule
  • RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用的服务
  • BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
  • ZoneAvoidanceRule:默认规则,复合判断server所在区域的性能和server的可用性选择服务器

3.调用

@RestController
@RequestMapping(value = "/")
public class RibbonDemoController {

    @Autowired
    RestTemplate restTemplate;

    /**
     * 获取信息示例
     * @return
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getMsg() {
        return restTemplate.getForObject("http://service-admin/getMsg", String.class);
    }
}

     

总结

Ribbon 主要还是作为了解和学习,学习 Ribbon 的负载均衡规则,以便在更好的使用 Feign

就使用上肯定 Feign 更加好用,即实现了 Ribbon,代码更简单,还附带有熔断器,一举多得

SpringCloud 之 Feign 以及 Feign 异常处理

相关文章:

  • SpringCloud 之 Hystrix 断路器,服务降级,自定义配置
  • Oracle 让指定数据排在最前面
  • Gitlab 之 Windows 环境进行 tomcat 持续集成部署,包含项目打包,备份,部署以及问题
  • Git 克隆指定分支的代码
  • Vue 新手学习笔记:vue-element-admin 之 入门开发教程(v4.0.0 之后)
  • Tomcat 内存优化
  • SpringCloud 之 Zuul 基础使用与进阶
  • Navicat 连接 sqlserver 带端口号配置
  • SpringCloud 之 Config 配置中心与动态刷新
  • Java 基础:队列
  • Java 基础:栈
  • LeetCode 151. 翻转字符串里的单词
  • LeetCode 1. 两数之和
  • LeetCode 20. 有效的括号
  • LeetCode 202. 快乐数
  • C学习-枚举(九)
  • JS基础之数据类型、对象、原型、原型链、继承
  • k8s 面向应用开发者的基础命令
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • underscore源码剖析之整体架构
  • 程序员该如何有效的找工作?
  • 简单实现一个textarea自适应高度
  • 三分钟教你同步 Visual Studio Code 设置
  • 思维导图—你不知道的JavaScript中卷
  • 消息队列系列二(IOT中消息队列的应用)
  • 小程序开发中的那些坑
  • 《天龙八部3D》Unity技术方案揭秘
  • Spring Batch JSON 支持
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #图像处理
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (4)logging(日志模块)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (算法)求1到1亿间的质数或素数
  • ***利用Ms05002溢出找“肉鸡
  • *p++,*(p++),*++p,(*p)++区别?
  • .Family_物联网
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET NPOI导出Excel详解
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET企业级应用架构设计系列之开场白
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • :如何用SQL脚本保存存储过程返回的结果集
  • [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间
  • [HDOJ4911]Inversion
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [iOS]GCD(一)
  • [Java] 什么是IoC?什么是DI?它们的区别是什么?
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍
  • [Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解
  • [LeetCode] 2.两数相加