黑马程序员技术交流社区

标题: 【广州】+【原创】spring Cloud Gateway 入门案例 [打印本页]

作者: 原则至上    时间: 2018-5-9 15:07
标题: 【广州】+【原创】spring Cloud Gateway 入门案例
Spring Cloud Gateway入门案例         本篇文章主要介绍了什么是Spring Cloud Gateway,并基于Spring Cloud Gateway的Finchley.M8版本编写一个Spring Cloud Gateway的入门案例,即基本代理的路由转发配置。

   1.Spring Gateway概述       1.1 什么是Spring Cloud Gateway
  Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
2. Spring Cloud Gateway入门案例     2.1 创建maven工程
配置Spring Cloud Gateway的相关Maven依赖
[XHTML] 纯文本查看 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ch18-1</artifactId>
        <groupId>cn.springcloud.book</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>ch18-1-gateway</artifactId>
    <packaging>jar</packaging>
    <name>ch18-1-gateway</name>
    <url>http://springcloud.cn</url>
    <properties>
        <spring-cloud.version>Finchley.M8</spring-cloud.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>
2.2 Spring Cloud Gateway主程序
SpringCloudGatewayApplication.java,代码如下所示:
[Java] 纯文本查看 复制代码
package cn.springcloud.book.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class SpringCloudGatewayApplication {
        @Bean
        public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
                return builder.routes()
                                //basic proxy
                                .route(r -> r.path("/baidu")
                                                .uri("http://baidu.com:80/")
                                ).build();
        }
        public static void main(String[] args) {
                SpringApplication.run(SpringCloudGatewayApplication.class, args);
        }
}
2.3 编写application.yml文件
[Bash shell] 纯文本查看 复制代码
server:  port: 8080
spring:
  application:
    name: spring-cloud-gateway
spring:
  cloud:
    gateway:
      routes:
      - id: xujin_route
        uri: http://www.xujin.org:80/
        predicates:
        - Path=/xujin
logging:
  level:
    org.springframework.cloud.gateway: TRACE
    org.springframework.http.server.reactive: DEBUG
    org.springframework.web.reactive: DEBUG
    reactor.ipc.netty: DEBUG

2.4 基本代理路由配置等同写法
Spring Cloud Gateway提供了两种配置路由规则的方法
PS,以上两种方式等同。


2.6 运行测试
[Java] 纯文本查看 复制代码
@Bean
        public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
                return builder.routes()
                                //basic proxy
                                .route(r -> r.path("/baidu")
                                                .uri("http://baidu.com:80/")
                                ).build();
        }



[Python] 纯文本查看 复制代码
spring:
  cloud:
    gateway:
      routes:
      - id: xujin_route
        uri: http://www.xujin.org:80/
        predicates:
        - Path=/xujin







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2