Ribbon进行服务调用/负载均衡以及请求重试配置
Ribbon负载均衡
经过对Eureka的认识,及Eureka集群的搭建,已经基本可以入门Eureka的使用。之前对于服务调用者我们是直接获取注册列表后通过 get(0) 的方式来获取第一个注册信息。而当我们服务提供者也搭建了集群之后。这种方式是不可取的。那么如何选择一个合适的提供者来提供服务呢?
首先排除我们自己通过硬编码的方式选。
之前接触过Zookeeper的朋友应该对负载均衡这个词不陌生,而Ribbon是另外的一种负载均衡程序,和Eureka同为NetFlix公司开发,且在Eureka客户端中集成了Ribbon。一般搭配使用。
Ribbon的主要作用
服务调用
基础Ribbon实现的服务调用,是通过拉取到所有的服务列表组成(服务名+请求路径)映射关系,借助RestTemplate实现调用。
注意:
在使用 Ribbon 进行服务调用的时候,应用的名称只能使用 - 中划线连接,不能使用下划线。否则服务将无法识别。
- 在注入RestTemplate的同时加上 @LoadBalanced 注解
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
- 服务调用的时候,不用再去手动的从列表中获取服务的请求url,直接使用服务名称替代之
@GetMapping("teacher/users")
public List getAllUser(){
return restTemplate.getForObject("http://SERVICE-PROVIDER/api/v1/users", List.class);
}
负载均衡
根据其内置的负载均衡算法,在有多个服务提供方时,选择合适的一个。Ribbon提供的负载均衡算法有:

可通过配置直接修改:
# 可以通过 服务名:ribbon:NFLoadBalancerRuleClassName: 对应的策略全类名
SERVICE-PROVIDER:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
重试机制
除了服务调用和负载均衡,Ribbon家族还提供了允许接口调用时重试。使用方法如下:
- 导入重试坐标
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
- 在配置文件中配置相应的参数
spring:
cloud:
loadbalancer:
retry:
enabled: true # 重试功能的开关 默认 true
SERVICE-PROVIDER:
ribbon:
ConnectTimeout: 250 # 与服务提供方建立Http连接的超时时间
ReadTimeout: 1000 # 接收返回数据的超时时间
OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
MaxAutoRetriesNextServer: 1 # 切换实例的重试次数
MaxAutoRetries: 1 # 对当前实例的重试次数(包含第一次请求,即配置1相当于请求超时就切换)
如果按照上面的配置,当消费方向提供方尝试建立连接后250ms未能成功,就会直接切换至下一个服务方尝试连接(autoRetries = MaxAutoRetries = 1)。此时如果还失败(autoRetriesNextServer = MaxAutoRetriesNextServer = 1),则请求失败。可以根据业务需求进行实际的配置
Ribbon进行服务调用/负载均衡以及请求重试配置的更多相关文章
- 一起来学Spring Cloud | 第三章:服务消费者 (负载均衡Ribbon)
一.负载均衡的简介: 负载均衡是高可用架构的一个关键组件,主要用来提高性能和可用性,通过负载均衡将流量分发到多个服务器,多服务器能够消除单个服务器的故障,减轻单个服务器的访问压力. 1.服务端负载均衡 ...
- spring cloud 使用ribbon简单处理客户端负载均衡
假如我们的multiple服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改 ...
- Spring Cloud 入门教程(五): Ribbon实现客户端的负载均衡
接上节,假如我们的Hello world服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端 ...
- 搭建服务与负载均衡的客户端-Spring Cloud学习第二天(非原创)
文章大纲 一.Eureka中的核心概念二.Spring RestTemplate详解三.代码实战服务与负载均衡的客户端四.项目源码与参考资料下载五.参考文章 一.Eureka中的核心概念 1. 服务提 ...
- 手把手带你利用Ribbon实现客户端的负载均衡
之前的文章<SpringCloud搭建注册中心与服务注册>介绍了注册中心的搭建和服务的注册,本文将介绍下服务消费者通过Ribbon调用服务实现负载均衡的过程. 本文目录 一.Ribbon服 ...
- Ribbon使用及其客户端负载均衡实现原理分析
1.ribbon负载均衡测试 (1)consumer工程添加依赖 <dependency> <groupId>org.springframework.cloud</gro ...
- .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...
- SpringCloud系列七:使用Ribbon实现客户端侧负载均衡
1. 回顾 在前面,已经实现了微服务的注册与发现.启动各个微服务时,Eureka Client会把自己的网络信息注册到Eureka Server上. 但是,在生成环境中,各个微服务都会部署多个实例,因 ...
- Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制
Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制 因为没有注册中心,所以需要网关对下游服务做负载均衡,然后果断集成Ribbon.中间遇到很多坑,最后终于解决了. 其实Ribbon里面 ...
随机推荐
- Oracle数据库添加删除主外键
(一)添加主键 1.表创建的同时,添加主键约束 语法: create table "表名" ( "列名1" 数据类型及长度 constraint "主 ...
- mock简单的json返回
针对非常简单的json返回串,我们也不一定非得通过freemarker模板的方式来构造返回数据,这里看实际的需求,如果返回的内容是固定的,而且json又非常简单,我们也可以直接写在程序里面,下面的接口 ...
- [SDOI2015]道路修建(线段树)
题意:给定2行n列的四连通带权网格图,支持修改边权和查询第[l,r]列的最小生成树 题解:这是一道好题,要么SDOI2019中n=2的20pts怎么会“我抄我自己”?(当然NOIP2018“我抄我自己 ...
- 跟踪路由(tracert)及ping命令
由于最近学校网络不好,老是有问题,加上最近写了个数据展示系统,要部署到买的域名下,用到了这两个命令 首先,一台服务器,一台工作站,一个笔记本(我的,来测试ip是否通的) 服务器已经部署了三个网站(一个 ...
- 关于Apache Commons-IO的使用
commons-io是一款处理io流的工具,封装了很多处理io流和文件的方法,可以大大简化我们处理io流和操作文件的代码.从common-io的官方使用文档可以看出,它主要分为工具类.尾端类.行迭代器 ...
- @Transactional回滚问题(try catch、嵌套)
Spring 事务注解 @Transactional 本来可以保证原子性,如果事务内有报错的话,整个事务可以保证回滚,但是加上try catch或者事务嵌套,可能会导致事务回滚失败.测试一波. 准备 ...
- Tomcat爆出严重漏洞,附影响版本及解决方案
昨天,群里聊嗨了.大家都在远程办公,却都急急忙忙的升级线上的 Tomcat 版本,原因就是 Tomcat 被曝出了严重的漏洞,几乎涉及到所有的版本. 一.漏洞原理具体来说就是 Apache Tomca ...
- OpenCV 特征点检测
#include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #inclu ...
- [Machine Learning] Andrew Ng on Coursera (Week 1)
Week 1 的内容主要有: 机器学习的定义 监督式学习和无监督式学习 线性回归和成本函数 梯度下降算法 线性代数回归 主要是了解一下机器学习的基本概念,重点是学习线性回归模型,以及对应的成本函数和梯 ...
- Spring-增强方式注解实现方式
SpringAOP增强是什么,不知道的到上一章去找,这里直接上注解实现的代码(不是纯注解,纯注解后续会有) 创建业务类代码 @Service("dosome")//与配置文件中&l ...