Spring Cloud Gateway负载均衡

作者&投稿:管琛 (若有异议请与网页底部的电邮联系)
~

我们都知道Spring Cloud Gateway是一个基于Spring Boot、Spring WebFlux、Project Reactor构建的高性能网关,旨在提供简单、高效的API路由。Spring Cloud Gateway基于Netty运行,因此在传统Servlet容器中或者打成war包是不能正常运行的。

Gateway有两种客户端负载均衡器, LoadBalancerClientFilter 和 ReactiveLoadBalancerClientFilter 。 LoadBalancerClientFilter 使用一个Ribbon的阻塞式 LoadBalancerClient ,Gateway建议使用 ReactiveLoadBalancerClientFilter 。可以通过设置 spring.cloud.loadbalancer.ribbon.enabled=false ,切换到 ReactiveLoadBalancerClientFilter 。无论使用Ribbon还是LoadBalancer,在Route中配置的lb是一样的

官网The LoadBalancerClient Filter

如果URI以lb开头,比如如上配置中的 lb://user-service ,Spring Cloud Gateway会用 ReactiveLoadBalancerClientFilter 解析服务名为 user-service 的实例对应的实际host和端口,并做集群负载均衡。

官网说用 lb://lakerservice 形式即可,但是配置完成后,并未生效。这个官网没有详细说明,查资料也没有,最后发现必须加入依赖:

Client ----> gateway ----> Ribbion负载均衡 取一个服务A ---->转发到服务A

Spring Cloud Ribbon 在高版本移除了

RouteRecordGlobalFilter 这个全局过滤器我们主要用来记录路由后的实际代理地址,以及调用耗时。我们看下RouteToRequestUrlFilter的描述会发现实际路由地址会通过ServerWebExchange中名为 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR 的属性保存。

gateway中的自动配置类GatewayLoadBalancerClientAutoConfiguration。

该自动配置类需要在RibbonAutoConfiguration自动配置类之后执行,该类是 spring-cloud-netflix-ribbon 的自动配置类,因此需要引入下面的jar包依赖

使用默认的ribbon,则ribbon的配置如下

官网Spring Cloud LoadBalancer

Spring Cloud Load Balancer并不是一个独立的项目,而是spring-cloud-commons其中的一个模块,因此很多配置和类可以在spring-cloud-common中找到。gateway中的自动配置类GatewayReactiveLoadBalancerClientAutoConfiguration

Spring Cloud提供了自己的客户端负载均衡器抽象和实现。对于负载平衡机制,ReactiveLoadBalancer已添加了接口,并为其提供了基于Round-Robin和Random的实现。为了获得实例以从反应式中进行选择ServiceInstanceListSupplier 。当前,我们支持基于服务发现的实现,ServiceInstanceListSupplier 该实现使用类路径中可用的发现客户端从服务发现中检索可用实例。

引入依赖:

配置如下:
从配置文件中读取服务,而不是从服务注册中心自动发现服务
注意:如果在项目的类路径下存在Spring Cloud Ribbon相关的类,需要通过配置关闭Ribbon功能,因为Spring Cloud默认优先使用Ribbon,因此spring.cloud.loadbalancer.ribbon.enabled禁用调Ribbon,这也是上面刚提到过的。

官网SimpleDiscoveryClient
SimpleDiscoveryClient可以结合注册中心使用,也可以静态配置。如果在类路径中没有支持从注册中心发现服务的DiscoveryClient实例,则将使用SimpleDiscoveryClient实例,该实例使用SimpleDiscoveryProperties来获取有关服务和实例的信息。参考上面的配置文件中的配置。

SimpleDiscoveryProperties 服务实例的属性配置

DefaultServiceInstance默认的服务实例定义

ReactiveLoadBalancer默认情况下使用的实现是RoundRobinLoadBalancer。要针对选定的服务或所有服务切换到不同的实现,可以使用自定义LoadBalancer配置机制。例如,可以通过@LoadBalancerClient注释传递以下配置以切换为使用RandomLoadBalancer:

Instance Health-Check for LoadBalancer官网

可以为LoadBalancer启用计划健康检查。为此提供了HealthCheckServiceInstanceListSupplier。它定期验证委托ServiceInstanceListSupplier提供的实例是否仍然存在,并且只返回健康的实例,除非没有实例—然后返回所有检索到的实例。

在使用SimpleDiscoveryClient时,这种机制特别有用。对于由实际服务注册中心支持的客户端,不需要使用它,因为我们在查询外部ServiceDiscovery之后已经获得了健康的实例。

对于每个服务只有少量实例的设置,也建议使用此供应商,以避免重试调用失败的实例。




罗山县17093844753: javaweb发布安全几种方式 -
剧凌巧特: 1.对终于信息进行加密,严禁明文传输.2.通过spring-cloud中gate进行网关控制.3.shiro进行权限控制.4.对js代码进行加密混淆,尽量不在js中做相关业务操作,将工程打成jar发布.5.应用现有常见防范技术,如防蠕虫手段.6.使用复杂密码.

罗山县17093844753: 写springcloud 遇到过什么困难 -
剧凌巧特: 1.在feign中使用熔断器hystrix,但是一直不起作用.因为在D版本的Spring Cloud中,它没有默认打开. 解决:在yml文件中加入 feign:hystrix:enabled: true 注意yml中不识别tab的空格. 做完以上工作,重启服务即可. 2.feign hystrix dashboard 断...

罗山县17093844753: 如何在springcloud分布式系统中实现分布式锁 -
剧凌巧特: Spring Cloud项目的既定目标在于为Spring开发人员提供一整套易于使用的工具集,从而保证其轻松构建起自己需要的分布式系统方案.为了实现这一目标,Spring Cloud以Netflix OSS堆栈为基础将大量实现堆栈加以整合并打包.这些堆栈而后...

罗山县17093844753: 如何使用Spring Boot/Spring Cloud 实现微服务应用 -
剧凌巧特: Spring Cloud介绍 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简...

罗山县17093844753: 如何使用Spring Cloud -
剧凌巧特: 使用Spring Cloud构建实际的微服务架构.基本概念:使用Docker进行集成测试 混合持久化 微服务架构 服务发现 API网关 Docker 使用Docker对每一个服务进行构建和部署.使用Docker Compose在一个开发机上进行端到端的集成测...

罗山县17093844753: spring cloud config加载本地配置文件,怎么访问 -
剧凌巧特: 项目,需要访问多个数据库,而且需要在服务器运行不重新启动的情况下,动态的修改spring中配置的数据源datasource,在网上找了很多资料,最后找到了适合我的方法,下面总结一下. spring的配置文件是在容器启动的时候就加载到内存中...

罗山县17093844753: 如何调用spring cloud微服务 -
剧凌巧特: spring-cloud调用服务有两种方式,一种是百Ribbon+RestTemplate, 另外一种是Feign.Ribbon是一个基于度HTTP和TCP客户端的负载均衡器,其实版feign也使用了ribbon, 只要使用@FeignClient时,权ribbon就会自动使用.

罗山县17093844753: 如何学习spring cloud -
剧凌巧特: 第1天:查看spring boot官方文档,实现及实验spring boot 应用. 第2天:熟读spring cloud官方文档配置管理部分并熟悉配置管理相关概念. 第3天:熟悉Git概念,并上传配置文件到Git服务器,最后实现分布式配置管理. 第4天:熟读spring cloud官

罗山县17093844753: 西天取经,学 Spring - Cloud,到底什么是 Spring - Cloud -
剧凌巧特: Spring Cloud 是Pivotal提 供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接器(Service Connector)的概念.云平台连接器是一个接口,需要由云平台提供者进行实现,以便库中的其他模块可以与该云平台协同工作.

罗山县17093844753: spring cloud resttemplate 和feign的区别 -
剧凌巧特: RestTemplate,是spring中方便使用rest资源的一个对象,交互访问的资源通过URL进行识别和定位,每次调用都使用模板方法的设计模式,模板方法依赖于具体接口的调用,从而实现了资源的交互和调用; 它的交互方法有30多种,大多数都是...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网