SpringCloud实战微服务之——Ribbon详解
Ribbon简介
③ 当部署多个相同微服务时,如何实现请求时的负载均衡?
实现负载均衡方式1:通过服务器端实现负载均衡(nginx)
实现负载均衡方式2:通过客户端实现负载均衡。
Ribbon工作时分为两步:第一步选择Eureka Server,它优先选择在同一个Zone且负载较少的Server;第二步再根据用户指定的策略,再从Server取到的服务注册列表中选择一个地址。其中Ribbon提供了很多策略,例如轮询round robin、随机Random、根据响应时间加权等。
Ribbon的使用
集成Ribbon以及简单使用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
@Bean
@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();
}
@GetMapping("/movie/{id}")
public User findById(@PathVariable Long id) {// VIP: Virtual IP http://microservice-provider-user/即虚拟IP 服务提供者的ServiceId (spring.application.name)return this.restTemplate.getForObject("http://microservice-provider-user/simple/" + id, User.class);
}
运行测试:依次启动Eureka Server和Eureka Clients(服务提供者和服务消费者)
访问测试:
发现两个服务提供者user分别被调用了2次,说明Ribbon默认的负载均衡策略是轮询。
自定义RibbonClient
@Configuration
public class TestConfiguration {@Autowiredprivate IClientConfig config;@Beanpublic IRule ribbonRule(IClientConfig config) { // 自定义为随机规则return new RandomRule();}
}
注意:@RibbonClient注解中的name属性是指服务提供者的服务名(即当前消费者使用自定义配置与其通信的服务提供者的spring.application.name的属性)
@RibbonClient(name = "microservice-provider-user",configuration = TestConfiguration.class)
public @interface ExcludeFromComponentScan {
}
自定义配置类
@Configuration
@ExcludeFromComponentScan
public class TestConfiguration1 {@Autowiredprivate IClientConfig config;@Beanpublic IRule ribbonRule(IClientConfig config) { // 自定义为随机规则return new RandomRule();}
}
在springboot主程序上添加注解
@RibbonClient(name = "microservice-provider-user",configuration = TestConfiguration1.class)
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = ExcludeFromComponentScan.class)})
运行测试:
② 通过配置文件自定义RibbonClient
官方文档地址:http://cloud.spring.io/spring-cloud-static/Camden.SR7/#_customizing_the_ribbon_client_using_properties
microservice-provider-user:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
经过测试是完全可行的。
Ribbon脱离Eureka使用
官方描述地址:http://cloud.spring.io/spring-cloud-static/Camden.SR7/#spring-cloud-ribbon-without-eureka
ribbon:eureka:enabled: false
第二步:配置某服务提供者的地址列表以及均衡策略(默认是轮询)
<服务提供者名称>:ribbon:listOfServers: localhost:7901,localhost:7902NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
因为我的Demo中引入了Eureka,所以我的配置如下所示:
ribbon:eureka:enabled: falsemicroservice-provider-user:ribbon:listOfServers: localhost:7901,localhost:7902NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
具体代码已上传GitHub,地址:https://github.com/liuxun1993728/ribbonDemo
SpringCloud实战微服务之——Ribbon详解相关推荐
- Apollo微服务配置中心详解
Apollo微服务配置中心详解 前言 一.Apollo架构 (一)简介 (二)角色介绍 (三)服务端实现 (四)客服端实现 二.Apollo部署 (一)准备数据库 (二)配置服务 1. 手动部署 (1 ...
- java实现的微服务架构_详解Java 微服务架构
一.传统的整体式架构 传统的整体式架构都是模块化的设计逻辑,如展示(Views).应用程序逻辑(Controller).业务逻辑(Service)和数据访问对象(Dao),程序在编写完成后被打包部署为 ...
- (三)SpringCloud实战微服务
一.微服务架构概述 1.1 微服务特性以及优点 每个服务可以独立运行在自己的进程里 一系列独立运行的微服务(goods,order,pay,user,search-)共同构建了整个系统 每个服务为独立 ...
- 使用SpringCloud实战微服务
转:https://blog.csdn.net/ittechnologyhome/article/details/73824784 一微服务架构概述 1.1 微服务特性以及优点 每个服务可以独立运行在 ...
- SpringCLoud实战微服务之——微服务简介以及入门使用
微服务概述 微服务是什么?微服务解决了什么问题?微服务有什么特点? 单体架构是什么? 一个归档包包含了应用所有功能的应用程序,我们通常称之为单体应用.架构单体应用的架构风格,我们称之为单体架构,这是一 ...
- 首席架构师推荐:史上最全微服务架构简史详解!
本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节. 要理解微服务,首先要先理解不是微服 ...
- SpringCloud学习笔记002---Spring Cloud实战微服务准备
============================================================= 开始使用Spring Cloud实战微服务 =============== ...
- Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建
为什么80%的码农都做不了架构师?>>> 一.关于框架更名的一点说明 最近在做年终总结.明年规划.还有几个项目需要了结.出解决方案,事情还比较多,死了不少脑细胞,距离上一篇文章 ...
- SpringCloud+Vue微服务教程与实战(1)--全新的开始
点此查看全部文字教程.视频教程.源代码 本文目录 1. 背景 2. 微服务架构的优缺点 3. 实现技术 4. 开发环境 5. 小结 1. 背景 之前已经讲过SSM完整的教程,我个人觉得是相当不错的,附 ...
- SpringCloud+CloudAlibaba微服务初阶入门
内容目录 微服务 为什么要用微服务? SpringCloud生态(旧版) 项目搭建 规范的创建父工程 父模块的pom的常用依赖 创建子模块 1.建module(maven) 2.改pom 3.写Yml ...
最新文章
- 用TensorFlow实现自编码器Autoencoders
- 调用startActivityForResult,onActivityResult无响应的问题
- make: *** [ext/fileinfo/libmagic/apprentice.lo] Er
- 【设计模式】单一职责原则
- python grpc 并发_用Python进行gRPC接口测试(二)
- java int.parse_java数据类型转换,parseXXX(String)或valueOf(String)有什么区别?
- 【UML】如何记忆UML类图的画法
- Django设计理念
- 图解 React-router 源码
- 与指定数字相同的数的个数(信息学奥赛一本通-T1102)
- 烂泥:ubuntu中使用virt-manager图形化新建虚拟机
- 操作系统(4)状态机视角下的程序执行
- accumulate
- qtqpixmap不出现图片_亚马逊对产品图片有哪些基本要求
- 朗文当代高级英语辞典android,朗文当代高级英语辞典最新版下载-朗文当代高级英语辞典第6版appv4.5.2 安卓版 - 极光下载站...
- 【详细】endnote中英文文献混排
- MySQL的性能分析关键字,explain,及其返回值代表的意思
- 经典游戏打砖块(粗糙版)
- Maxwell和Simplorer联合仿真设置注意事项
- electron下载失败_解决方案汇总
热门文章
- 杭电 oj 1006 Tick and Tick 个人题解
- 适用于ARM开发板的Armbian Linux22.08发布
- Infor CloudSuite Industrial (SyteLine) IDO 行授权 设置
- 74HC573芯片介绍
- 语义化版本号 Sematic Versioning
- 加拿大计算机工程研究生,加拿大维多利亚大学电子与计算机工程系副教授诚招硕士研究生 - 导师招生 - 小木虫 - 学术 科研 互动社区...
- 金融科技赋能 互融云手机回租系统 实现资产全流程在线运营管理
- java中计算文件的md5,Java计算文件MD5值代码
- 骄傲地宣布一件事:月入3万的目标还没实现
- 10. logback详解,Flink流处理案例及Hive和Hbase的整合