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;}}}
推荐阅读
-
-
-
『醉饮啸惊鸿』今天她发来短信:我让你做毛驴的机会都没有,笑话:和女友闹矛盾
-
-
『健康食疗』皱纹最怕此几物,爱美女性要常吃,每一口都是满满的胶原蛋白
-
-
中国新闻网客户端|鞠婧祎、宋威龙新剧开播 UNINE献唱推广曲MV曝光
-
海峡军志号|印陆军司令亲赴前线,印防长抵达俄罗斯,印度20万大军齐聚拉达克
-
电视剧|《长歌行》再官宣,第二波演员阵容被公布后,粉丝激动得坐不住了
-
「潜艇」美潜艇失踪75年后,意外在我国东海出现,美方:禁止任何人打捞
-
豆瓣|真实到不敢看第二遍的高分电影,你若全都看过,内心是真的强大
-
-
养多肉小米星,掌握“3秘诀”,叶片肥美,颜色好看得不得了
-
-
洗衣机行业峰会召开 海尔衣联网斩获物联网场景生态突出贡献奖
-
小马食图|精选咖喱素三宝、青红椒拌皮蛋、凉拌茄子、凉拌金针菇等凉菜做法
-
【乐居财经】快讯:渤海信托撤出珠海弘佳房地产40%股份投资
-
-
-
菁妈育儿|太淘气被爸爸分到不同班,辅导作业就知错了,安徽5胞胎上初中了