ZonePreferenceServerListFilter: 主动首选本地区域的过滤器 。 ServerListSubSetFilter: 服务器列表过滤器,将负载均衡器使用的服务器数量限制为所有服务器的子集 。ServerListUpdater更新服务器列表 。
- EurekaNotificationServerListUpdater: 利用Eureka的时间监听器触发LB缓存更新 。
- PollingServerListUpdater: 默认的策略动态更新服务器列表 。
IClientConfig
- IClientConfig的实现类为DefaultClientConfigImpl 。DefaultClientConfigImpl是默认的客户端配置,可以从Archaius ConfigurationManager加载属性 。
ILoadBalancerLoadBalancer的组成:
- 一个基于特定条件可能进行存储的服务器列表 。
- 一个类:通过IRule实现并定义LoadBalancing策略 。
- 该类定义并实现一种机制,用户确定列表中节点/服务器的实用性/可用性 。
LoadBalancer的实现类:
- BaseLoadBalancer: 基本的实现,ping确定存活的服务器列表 。
- DynamicServerListLoadBalancer: 动态获取的服务器列表 。
- ZoneAwareLoadBalancer: LoadBalancer将计算并检查所有可用区域的区域统计信息 。如果任何区域的“平均活动请求数”已达到配置的阈值,
则该区域将从活动服务器列表中删除 。如果多个区域已达到阈值,则将删除每台服务器上最活跃请求的区域 。一旦删除了最坏的区域,将在其余区域中选择一个区域,其概率与其实例数成正比 。服务器将从具有指定规则的选定区域返回 。每个区域相关的负载平衡决策都是在最新统计信息的帮助下实时做出的 。
代码实践pom.xml增加SpringCloud Gateway和Ribbon依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath/> </parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency></dependencies>代码方式配置网关
@SpringBootApplication@RestControllerpublic class DemoGatewayApplication {public static void main(String[] args) {SpringApplication.run(DemoGatewayApplication.class, args);}@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route(r -> r.path("/refund/**").filters(f -> f.addRequestHeader("Hello", "World")).uri("http://manage-test.payplatform.speiyou.cn/")).build();}}yml方式配置网关
spring:application:name: gateway-servicecloud:gateway:routes:- id: merchanturi: lb://merchant-load-balanced-servicepredicates:- Path=/merchant/**- Method=POST- id: splituri: lb://split-load-balanced-servicepredicates:- Path=/split/**filters:- RewritePath=/split, /ledger-split #重写url- id: cashieruri: lb://cashier-load-balanced-servicepredicates:- Path=/cashier/**filters:- StripPrefix=1 #将cashier过滤掉#ribbon全局配置ribbon:ConnectTimeout: 1000 #服务请求连接超时时间(毫秒)ReadTimeout: 3000 #服务请求处理超时时间(毫秒)OkToRetryOnAllOperations: true #对超时请求启用重试机制MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数MaxAutoRetries: 1 # 切换实例后重试最大次数NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #负载均衡算法NFLoadBalancerPingClassName: com.talpay.gateway.config.HealthCheck#健康检查NFLoadBalancerPingInterval: 20#设置健康检查间隔,单位秒,默认30秒merchant-load-balanced-service:ribbon:listOfServers: 192.168.xxx.xxx:8080split-load-balanced-service:ribbon:listOfServers: 192.168.xxx.xxx:8081cashier-load-balanced-service:ribbon:listOfServers: 192.168.xxx.xxx:8080Ribbon服务健康检查
@Slf4j@Componentpublic class HealthCheck implements IPing{@Autowiredprivate RestTemplate restTemplate;@Value("${dingtalk.url}")private String dingtalkURL; //钉钉报警url@Overridepublic boolean isAlive(Server server) {String url = "http://"+ server.getId()+ "/actuator/health";try {ResponseEntity<String> heath = restTemplate.getForEntity(url, String.class);if (heath.getStatusCode() == HttpStatus.OK) {log.info("ping " + url + " success ");return true;}log.info("ping " + url + " error and response is " + heath.getBody());return false;} catch (Exception e) {log.error("ping " + url + " failed");DingRebotSendUtil.send(dingtalkURL,new TextMessage("网关|ping:" + url + " failed"));return false;}}}
推荐阅读
-
-
「安兔兔」安兔兔发布3月份手机性能排行 OPPO中高端通吃
-
人民日报客户端广东频道|“财商教育”是什么?专家建议纳入义务教育体系
-
卡车之友网|发布4个先进解决方案采埃孚推进中国市场深度国产化|卡车之友网
-
倩影美食人生|鲜香味美,瞬间让你胃口大开,精选10道百吃不厌的家常菜
-
[AD]大师兄因病缺席新人AD碾压孙哥零封100T收获两连胜
-
「新咖说电影」30岁入千亿豪门,奚梦瑶逆袭的人生,一场失误获半个娱乐“心疼”
-
人民日报微博|全国各地高考查分报志愿时间表全汇总,2020高考查分报志愿地址电话一览
-
李传前_齿医生口腔正畸|种植牙的三个阶段,大连齿医生口腔科普
-
湖人队@湖人夺冠率高达100%?美媒说出5大致胜因素,却忽略2个坏消息
-
开封最火的小吃一条街 开封最火的小吃一条街叫什么街
-
凤权天下:网友:“实在!”,全新日产阳光登场!省油动力强
-
『任嘉伦』《秋蝉》后又一民国剧将袭,女主是任嘉伦老搭档,也太巧合了吧?
-
体育大参考|马刺出局,西部排行:一场106-119爆冷让灰熊进附加赛!太阳赢球
-
[私生饭]第二天看她新签名,开心笑话:一女性好友醉了我把她送回家就走了
-
球场十二人■有伟大历史且在创造着新的历史,麦克马纳曼:利物浦很像皇马
-
【幸运番茄】即使披荆斩棘,夜读人生:不管遇到什么困难
-
-
数码实验室|售出超过51500张,福奇博士的“新秀”棒球卡创下Topps销售纪录
-
新华网|四川计划2022年粮油综合产值达3700亿元