Spring Cloud 网关-配置一个简单的路由【翻译】

java技术文章

2018-11-27

175

0

Spring Cloud网关能帮助实现网关匹配你的API,尤其是在微服务环境。通过一个例子学习怎样使用它。

Spring Cloud网关可以被认为是一个成功的Spring Cloud Netflix Zuul项目并且在微服务环境中帮助实现微服务网关匹配。它是和spring webflux构建在Spring boot 2的顶部并且是非阻塞端对端--它暴露了一个基于Netty的服务,使用一个基于Netty客户端调用下游微服务并且对于余下的流量使用反应器核心。

我这里的目标是显示怎样用一个基于路由的小型的spring cloud netflix Zuul在使用Spring Cloud网关进行多个路径分发。

Spring Cloud Netflix Zuul

Srping Cloud Zuul允许使用一个Yaml属性文件表达式去配置简单的路由规则:

zuul:
  routes:
    sample:
      path: /zuul/**
      url: http://httpbin.org:80
      strip-prefix: true
这个路由可能在Zuul暴露一个端点,并且拦截带有"/zuul"前缀URL的任何请求,然后剥离zuul前缀调用下游系统。
 
Spring Cloud网关
Spring Cloud网关有3种方法实现等效功能的编码-一个是使用基于java的DSL,一个是使用基于Kotlin DSL和使用简单配置属性的配置文件。
 
可以使用 http://start.spring.io生成一个启动项目。
 
基于JAVA的DSL
创建一个简单类似Zuul路由的java DSL代码如下:
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 GatewayRoutes {
    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r ->
                        r.path("/java/**")
                                .filters(
                                        f -> f.stripPrefix(1)
                                )
                                .uri("http://httpbin.org:80")
                )
                .build();
    }
}
这个是一个可读的DSL,配置一个路由拦截java开头的URL,并且剥离这个前缀发送到下游系统。
 
基于Kotlin DSL
一个基于Kotlin DSL 配置路由看起来如下:
import org.springframework.cloud.gateway.route.RouteLocator
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder
import org.springframework.cloud.gateway.route.builder.filters
import org.springframework.cloud.gateway.route.builder.routes
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration
class KotlinRoutes {
    @Bean
    fun kotlinBasedRoutes(routeLocatorBuilder: RouteLocatorBuilder): RouteLocator =
            routeLocatorBuilder.routes {
                route { 
                    path("/kotlin/**")
                    filters { stripPrefix(1) }
                    uri("http://httpbin.org")
                }
            }
}
我之前提交了一个  PR for Kotlin based DSL for Spring Cloud Gateway路由事例,并且偏向使用Kotlin去配置使用Spring Cloud网关。这个路由匹配带有“kotlin”前缀的url,并且在调转到下个路由之前将其剥离。
 
基于配置属性的路由
最后,基于属性的配置如下:
spring:
  cloud:
    gateway:
      routes: 
        - predicates:
            - Path=/props/**
          filters:
            - StripPrefix=1
          uri: "http://httpbin.org"
这个路由和java、kotlin版本一样匹配带有props前缀的URL并且在调用下个系统之前剥离。这个基于属性配置的版本新增了一个在运行时可更新的优势。
 
结论:
这个是一个非常简单快速的介绍Spring Cloud网,通过比较从Spring Cloud Netflix Zuul典型的配置映射到Spring Cloud网关。

欢迎访问:www.hongfu951.com博客,查看更多文章

发表评论

全部评论:0条

鸿福951

努力打造一个好用的webui

热评文章

推荐文章