Spring Cloud Gateway是由Spring官方基于Spring5.0,Spring Boot2.0,Project Reactor等技术开发的网关,目的是代替原先版本中的Spring Cloud Netfilx Zuul。Spring Cloud Gateway基于Webflux,比较完美地支持异步非阻塞编程,很多功能实现起来比较方便。
Spring Cloud Gateway的特征:
基于 Java 8 编码
基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0 动态路由
Predicates 和 Filters 作用于特定路由
集成 Hystrix 断路器
支持 Spring Cloud DiscoveryClient 配置路由,与服务发现与注册配合使用
易于编写的 Predicates(断言) 和 Filters
限流
支持 WebSockets
路径重写
创建service-gateway工程说明Spring Cloud Gateway的使用:
pom.xml文件的关键配置:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.7.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</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-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
启动类:
@SpringBootApplication @EnableEurekaClient public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } }
application.yml文件的配置:
server: port: 2001 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-id: ${spring.cloud.client.ip-address}:${server.port} prefer-ip-address: true client: service-url: defaultZone: http://root:123456@${eureka.instance.hostname}:7001/eureka/ spring: application: name: service-gateway cloud: gateway: discovery: locator: enabled: false #关闭通过服务名路由到具体服务实例的功能 routes: - id: service-id # uri: http://localhost:9001 #目标服务地址 uri: lb://service-consumer-1 #以负载均衡方式路由到目标服务,格式为 lb://服务名 predicates: - Path=/api/** #基于路径的路由策略 filters: - StripPrefix=1 #去掉路径前缀
访问网关地址 http://localhost:2001/api/addUser 会路由到微服务地址 http://localhost:9001/addUser
开启以服务名开头的请求路径转发到对应的服务:
server: port: 2001 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-id: ${spring.cloud.client.ip-address}:${server.port} prefer-ip-address: true client: service-url: defaultZone: http://root:123456@${eureka.instance.hostname}:7001/eureka/ spring: application: name: service-gateway cloud: gateway: discovery: locator: enabled: true #启用通过服务名路由到具体的服务实例 lowerCaseServiceId: true #启用服务名称小写支持,即将请求路径上的服务名配置为小写
访问网关地址 http://localhost:2001/service-consumer-1/addUser 会路由到微服务地址 http://localhost:9001/addUser
设置spring.cloud.gateway.discovery.locator.enabled=true,表明gateway开启服务注册和发现的功能,并且gateway自动根据服务发现为每一个服务创建一个router,这个router将以服务名开头的请求路径转发到对应的服务。此时,gateway的路由规则是:
http://Gateway_HOST:Gateway_PORT/大写的serviceId/**
其中微服务名默认大写访问
设置spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true,可以将请求路径上的服务名配置为小写。
更改Spring Cloud Gateway的默认负载均衡策略
当同一服务名下有多个服务实例时,默认是采用轮询的负载均衡策略,通过在启动类配置负载均衡Bean类可以更改默认策略。
/** * 更改gateway服务路由的负载均衡策略 */ @Bean public IRule feignRule(){ return new RandomRule(); }
配置Gateway的路由熔断功能
熔断器控制类:
@RestController public class HystrixController { @GetMapping("/hystrixCommandFallback") public Response hystrixCommandFallback(){ Response response = new Response("100", "服务暂时不可用"); return response; } }
全局路由熔断的配置:
spring: cloud: gateway: default-filters: - name: Hystrix args: name: hystrixCommand fallbackUri: forward:/hystrixCommandFallback
特定路由的熔断配置:
spring: cloud: gateway: routes: - id: a uri: lb://service-consumer-1 predicates: - Path=/cjm/** filters: - StripPrefix=1 - name: Hystrix #熔断器过滤器 args: name: hystrixCommand #熔断器名称,自行定义 fallbackUri: forward:/hystrixCommandFallback #回退方法
服务网关Spring Cloud Gateway -- Predicate介绍
服务网关Spring Cloud Gateway -- 全局过滤器
服务网关Spring Cloud Gateway -- 网关过滤器工厂
相关推荐
Spring Cloud Gateway的全局异常处理 Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理,通过跟踪异常信息的抛出,找到对应的源码,自定义一些处理逻辑来符合业务的需求。 网关都是给接口做...
这个项目提供了一个构建在 Spring 生态系统之上的 API 网关,包括:Spring 5,Spring ... Spring Cloud Gateway 旨在提供一种简单而有效的 API 路 由方式,并为其提供横切关注点,例如:安全,监控/指标和弹性。
网关里包括一个简单aop代理,使用简单路由及默认过滤器,还有5个一样的修改request body的自定义全局过滤器。
websocket,springcloud
Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的 API 网关,它旨在为微服务架构提供一种简单、有效、统一的 API 路由管理方式。 Spring官方博客发布了一篇关于Spring Cloud Gateway的CVE...
spring cloud gateway是一个spring提供的用于构建网关的子项目,文档内容主要是实现网关跨域。
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway...
Spring cloud alibaba nacos与spring cloud gateway结合demo,项目注册,网关服务。
百讯基于SpringCloud gateway 实现鉴权限流网关.zip
SpringCloud(八):API网关整合OAuth2认证授权服务。
适用最新的spring cloud稳定版,微服务注册中心适用最新稳定版zookeeper。适用spring cloud gateway作为网关服务的demo
- [springcloud(十六):服务网关 Spring Cloud GateWay 服务化和过滤器](http://www.ityouknow.com/springcloud/2019/01/19/spring-cloud-gateway-service.html) - [springcloud(十七):服务网关 Spring Cloud ...
springcloud zuul gateway 服务网关 http://knight-black-bob.iteye.com/blog/2357683
通过三个服务(eureka注册中心,gateway网关,userservice普通服务),实现gateway网关转发服务,并且整合websocket
Spring Cloud Gateway适用于构建和管理大规模微服务架构中的网关服务。它可以用于以下场景: 1.路由管理:将外部请求路由到不同的微服务实例,根据请求路径、主机名等条件进行路由转发。 2.过滤和增强功能:通过过滤...
1. 包含cloud-alibaba-gateway-9999网关服务,springcloudalibaba-nacos-9001和demo-9002两个业务服务 2. 基于spring-boot 的2.3.12.RELEASE版本, spring-cloud的Hoxton.SR12版本,spring-cloud-alibaba的2.2.8....
Spring Cloud Gateway适用于构建和管理大规模微服务架构中的网关服务。它可以用于以下场景: 1.路由管理:将外部请求路由到不同的微服务实例,根据请求路径、主机名等条件进行路由转发。 2.过滤和增强功能:通过过滤...
一篇很好的springCloud学习的思维导读,详细的介绍了,springCloud的搭建步骤以及各组件的说明讲解 涵盖 Eureka服务注册与发现 Zookeeper服务注册与发现 Consul服务注册与发现 Ribbon负载均衡服务调用 OpenFeign...
Spring Cloud Gateway旨在提供一种简单而有效的API路由方式,并为其提供横切关注点,例如:安全,监控/指标和弹性。 特征: (1)构建于Spring Framework 5,Project Reactor 和 Spring Boot 2.0 (2)能够匹配任何...
主要介绍了spring cloud gateway整合sentinel实现网关限流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下