标签:net tab splay b2b 注解 使用 访问 发送 http
Gateway 是在 Spring 生态系统之上构建的API网关服务,基于 Spring 5,Spring Boot 2 和 Project Reactor 等技术。Spring Cloud Gateway 旨在提供一种简单而有效的方法来对API进行路由,以及提供一些强大的过滤器功能,例如:熔断、限流、重试等。
一句话概括:Spring Cloud Gateway 使用的 Webflux 中的 reactor-netty 响应式编程组件,底层使用了 Netty 通信框架。
Spring Cloud GateWay 具有如下特性:
基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0 进行构建;
动态路由:能够匹配任何请求属性;
可以对路由指定 Predicate (断言) 和 Filter (过滤器);
集成 Hystrix 的断路器功能;
集成 Spring Cloud 服务发现功能;
易于编写的 Predicate (断言) 和 Filter (过滤器);
请求限流功能;
支持路径重写。
Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由。
Filter(过滤器):指的是 Spring 框架中 GatewayFilter 的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。
下图从总体上概述了 Spring Cloud Gateway 的工作方式:
客户端向 Spring Cloud Gateway 发出请求。然后 Gateway Handler Mapping (处理映射) 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,之后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前 ("pre") 或之后 ("post") 执行业务逻辑。核心逻辑:路由转发 + 执行过滤器链。
1)创建gradle模块api-gateway并添加如下依赖, Gateway 是使用 netty+webflux 实现因此不需要再引入 web 模块
dependencies { compile group: ‘org.springframework.cloud‘, name: ‘spring-cloud-starter-netflix-eureka-client‘, version: ‘2.1.5.RELEASE‘ compile group: ‘org.springframework.cloud‘, name: ‘spring-cloud-starter-gateway‘ }
2)在启动类上添加@EnableDiscoveryClient注解,需要被注册中心发现
package org.wesson.springcloud.gateway; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient @SpringBootApplication public class ApiGatewayApplication { public static void main(String[] args) { SpringApplication.run(ApiGatewayApplication.class, args); } }
server: port: 5001 spring: application: name: api-gateway cloud: gateway: routes: - id: provider-route #路由的ID,没有固定规则但要求唯一,建议配合服务名 uri: http://localhost:8081 #匹配后提供服务的路由地址 predicates: - Path=/client/info/** #断言,路径相匹配的进行路由 eureka: instance: hostname: localhost client: fetch-registry: true register-with-eureka: true service-url: defaultZone: http://localhost:8761/eureka/
package org.wesson.springcloud.gateway.config; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class GatewayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) { RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes(); routes.route("provider-service", r -> r.path("/guonei").uri("https://news.baidu.com/guonei")).build(); return routes.build(); } }
5)测试
Step1:运行 eureka-server 启动类,端口为8761
Step2:运行 provider-service 启动类,端口为8081
Step3:
Step4:访问http://localhost:8761/,注册到的服务如下图:
hello, service provider port is from:8081
Step6:访问添加网关之后路径:http://localhost:5001/client/info,可以成功通过5001转发到8081返回数据:
hello, service provider port is from:8081
路由转发规则有点类似于按照上面的配置,慢慢得淡化真实访问地址以及端口号。
SpringCloud(Greenwich版)新一代API网关Gateway
标签:net tab splay b2b 注解 使用 访问 发送 http
原文地址:https://www.cnblogs.com/wessonshin/p/12488031.html