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网关常见的开源实现包括:nginxspring cloud zuulspring cloud gateway、kong等,云服务厂商也都有API网关服务,比如阿里云AwsAzure有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的更多示例

以上是关于Spring Cloud Gateway — 网关基本功能API暴露的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud —— Gateway 服务网关

Spring Cloud Gateway 网关尝鲜

最全面的改造Zuul网关为Spring Cloud Gateway(包含Zuul核心实现和Spring Cloud Gateway核心实现)

创建网关项目(Spring Cloud Gateway)

spring cloud gateway网关路由分配

Spring Cloud微服务网关Gateway组件