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依赖:

        >
            >org.springframework.cloud>
            >spring-cloud-starter-netflix-eureka-client>
        >

添加 @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)