Spring Cloud Gateway — 网关基本功能API暴露
Posted 不去天涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Gateway — 网关基本功能API暴露相关的知识,希望对你有一定的参考价值。
API网关
API网关是一种设计模式,一种在微服务体系下的经典构件。要了解最新API网关模式可以参考敖小剑写的《Service Mesh和Api Gateway关系深度探讨》
早期SOA阶段,也是有API网关的,比如开放平台接口包含了一系列功能,比如淘宝提供了用户授权能力、电商能力、支付能力、快递能力、发票能力、商品管理能力等很多能力,也必然是有多个SOA服务提供,都从统一的网关服务https://eco.taobao.com/router/rest(这是淘宝API的最新接口,不是早期的接口)暴露出来的。
微服务场景下API网关的使用度更高,一些小型的业务接口也往往分散在多个后端服上,为了达到接口的统一管理、权限验证、通用处理都需要API网关的存在。有些设计上还会重度依赖API网关做业务隔离、订号生成、set化路由等。
API网关常见的开源实现包括:nginx、spring cloud zuul、spring cloud gateway、kong等,云服务厂商也都有API网关服务,比如阿里云、Aws、Azure有API网关产品。
config文件方式配置
把请求路由到http://httpbin.org:80的yml配置:
spring:
cloud:
gateway:
routes:
- id: default_path_to_httpbin
uri: http://httpbin.org:80
order: 10000
predicates:
- Path=/**
java代码方式配置
通过java代码配置路由到http://httpbin.org:80
@SpringBootConfiguration
@EnableAutoConfiguration
public class GatewayTestApplication
public static void main(String[] args)
SpringApplication.run(GatewayTestApplication.class, args);
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder)
//@formatter:off
// String uri = "http://httpbin.org:80";
// String uri = "http://localhost:9080";
return builder.routes()
.route(r -> r.path("/**").uri("http://httpbin.org:80"))
.build();
//@formatter:on
动态服务发现方式配置
添加Netflix eureka client依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
添加 @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudGatewayExamplesLbApplication
public static void main(String[] args)
SpringApplication.run(SpringCloudGatewayExamplesLbApplication.class, args);
添加eureka 服务发现配置
# use eureka discovery, so add eureka discovery server config
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
enabled: true
instance:
prefer-ip-address: true
# open gateway discovery locator and close non-flux loadbalancer
spring:
application:
name: spring-cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true
loadbalancer:
ribbon:
enabled: false
所有http://localhost:8080/EXAMPLE-SERVICE/hello
形式的请求会自动发现服务名为EXAMPLE-SERVICE的服务提供者,并发送http://localhost:890/hello
请求。
以上是关于Spring Cloud Gateway — 网关基本功能API暴露的主要内容,如果未能解决你的问题,请参考以下文章
最全面的改造Zuul网关为Spring Cloud Gateway(包含Zuul核心实现和Spring Cloud Gateway核心实现)