Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制
Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制
因为没有注册中心,所以需要网关对下游服务做负载均衡,然后果断集成Ribbon。中间遇到很多坑,最后终于解决了。
其实Ribbon里面默认开启了重试机制的。
Zuul配合Ribbon的代码展示:
如果希望最后的映射路由有前缀/test ,那么需要加上strip-prefix=false,因为默认是true。
zuul.routes.test.path=/test/**
zuul.routes.test.strip-prefix=false
zuul.routes.test.serviceId=test
test.ribbon.listOfServers=http://192.168.10.161:9001,http://192.168.10.162:9001
关于重试的其他配置:
ribbon.MaxAutoRetries=1 # 对当前实例的重试次数
ribbon.MaxAutoRetriesNextServer=10 # 切换实例的重试次数
ribbon.ConnecTimeOut=3000 # 请求的连接时间
ribbon.OkToRetryOnAllOperations=true # 对所有操作都进行重试
备注: 上述是对所有进行配置,如果需要对某个服务,则可以在前面加上服务名称。例如上述的test服务,则是test.ribbon.MaxAutoRetries=xxx
RestTemplate配合Ribbon
第一步:
在RestTemplate的Bean上加注解@LoadBalance 就结束了。
@Configuration
public class RestConfiguration { @Autowired
RestTemplateBuilder builder; @LoadBalanced
@Bean
public RestTemplate restTemplate() {
return builder.build();
} }
利用RestTemplate发送请求,达到负载均衡和重试效果。
public HttpResult verifyToken(String token, String ip) {
JSONObject result = restTemplate.getForObject("http://test/" + "token/verify/{token}/{ip}", JSONObject.class, token, ip);
HttpResult httpResult = JSON.parseObject(result.toJSONString(), HttpResult.class);
return httpResult;
}
url中间的host+port被替换成了额服务名称,(可以是注册中心注册的服务名,也可以是自定义的,比如咱们这个脱离Eureka的就是自定义的,开头有配置。),它会根据test这个服务名,找配置中的listServers根据负载均衡策略和配置好的重试配置,来进行负载均衡和失败重试。
关于负载均衡策略
1. 首先配置某个服务实例的负载均衡策略(注意,这个类不能被Componscan扫描到,否则会被所有的配置共享,比如我就是加了个自定义注解@IngoreComponentScan,然后配置了不扫描这个注解所在的类)
@Configuration
@IgnoreComponentScan
public class TestRibbonConfiguration { @Bean
public IRule ribbonRule() {
return new RoundRobinRule();
}
}
2.然后配置一个Ribbon客户端,服务名写你想配置的服务名,配置类自然就是刚刚配置的配置类。
@Configuration
@RibbonClient(name = "test", configuration = TestRibbonConfiguration.class)
public class RibbonConfiguration {
}
这样Ribbon的负载均衡策略就OK了(仅仅是针对test服务的,如果想配置所有的默认配置,那么单独配置就好了, 看看官网或者别的博客...我就不记笔记了。。。)
Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制的更多相关文章
- 0405-服务注册与发现-客户端负载均衡-Ribbon 同Eureka使用,Ribbon脱离Eureka使用
一.Ribbon 同Eureka使用,注意事项 前几节一同使用,注意事项: 如果没有其他区域数据源,则根据客户端配置进行猜测(与实例配置相反).能够获取eureka.client.availabili ...
- Ribbon进行服务调用/负载均衡以及请求重试配置
Ribbon负载均衡 经过对Eureka的认识,及Eureka集群的搭建,已经基本可以入门Eureka的使用.之前对于服务调用者我们是直接获取注册列表后通过 get(0) 的方式来获取第一个注册信息. ...
- 5.使用Ribbon实现客户端侧负载均衡
Ribbon实现客户端侧负载均衡 5.1. Ribbon简介 Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法 ...
- SpringCloud系列七:使用Ribbon实现客户端侧负载均衡
1. 回顾 在前面,已经实现了微服务的注册与发现.启动各个微服务时,Eureka Client会把自己的网络信息注册到Eureka Server上. 但是,在生成环境中,各个微服务都会部署多个实例,因 ...
- spring cloud使用zuul实现反向代理和负载均衡
首先,这篇文章参考的是http://blog.didispace.com/springcloud5/这位大牛的博客.本人是通过这篇博客来学习zuul的,现在写的博客只是个人在学习时个人的一些感受和理解 ...
- 手把手带你利用Ribbon实现客户端的负载均衡
之前的文章<SpringCloud搭建注册中心与服务注册>介绍了注册中心的搭建和服务的注册,本文将介绍下服务消费者通过Ribbon调用服务实现负载均衡的过程. 本文目录 一.Ribbon服 ...
- Spring Cloud Ribbon源码分析---负载均衡实现
上一篇结合 Eureka 和 Ribbon 搭建了服务注册中心,利用Ribbon实现了可配置负载均衡的服务调用.这一篇我们来分析Ribbon实现负载均衡的过程. 从 @LoadBalanced入手 还 ...
- Ribbon使用及其客户端负载均衡实现原理分析
1.ribbon负载均衡测试 (1)consumer工程添加依赖 <dependency> <groupId>org.springframework.cloud</gro ...
- spring cloud 使用ribbon简单处理客户端负载均衡
假如我们的multiple服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改 ...
随机推荐
- sql注入攻击的预防函数-如何防御sql注入
1.预编译 2.捆绑变量各种过滤 用到的函数: addslashes htmlspecialchars mysql_escape_string($string) mysql_real_escape ...
- osg osgUtil::LineSegmentIntersector
#ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include <osgViewer/Viewer> #include ...
- 123456---com.twoapp.xiaoxiaozuqiujiang---小小足球将
com.twoapp.xiaoxiaozuqiujiang---小小足球将
- Tools - Nmap
Nmap Homepage Nmap参考指南(Man Page) Nmap中文网 wiki - Nmap 常用示例 1) Ping扫描,打印出对扫描做出响应的主机 nmap -sP 192.168.1 ...
- (转)华为 安卓手机在MAC系统下 ADB 识别
使用MACOS发现在Android开发环境完整的情况下,接入小米,SAMSUNG,HTC,ZTE等手机都可以自动识别,如果暂时不能识别,只需要在 adb_usb.ini 中设置之后也可以识别,并可以在 ...
- DefaultListBeanFactory的子类之SimpleAliasRegistry
DefaultListBeanFactory类结构层次图 从继承图看,SimpleAliasRegistry是DefaultListBeanFactory继承类中最底层的实现类. SimpleAlia ...
- python 问题解决:UnicodeEncodeError: 'ascii' codec can't encode character u'\uff08'
第一种方案(90%情况下,大部分帖子都是这个)一般报错到代码都是自己写到代码,代码上添加 import sysreload(sys)sys.setdefaultencoding('utf-8') 第二 ...
- 设计模式的好书 -- ongoing
1 设计模式--可复用面向对象软件的基础 Erich Gamma. Richard Helm -- 已经下载了/baiduNetDisk Design Patterns --- Element ...
- Oracle之配置节点间相互信任机制测试
更改一下,之前的都不对,现在来一版简单有效的ssh互信配置 例如我的是在配置rac,在grid用户下配置互信:建立好相应的文件 mkdir .ssh chmod -R 700 .ssh/ 使用ssh- ...
- VUE创建项目
Vue Cli项目搭建 vue项目需要自建服务器:node 什么是node: 用C++语言编写,用来运行JavaScript语言 node可以为前端项目提供server (包含了socket) ...