A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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 [url]http://maven.apache.org/xsd/maven-4.0.0.xsd[/url]">
    <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>[url]http://springcloud.cn[/url]</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>[url]https://repo.spring.io/snapshot</url>[/url]
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>[url]https://repo.spring.io/milestone</url>[/url]
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>[url]https://repo.spring.io/snapshot</url>[/url]
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>[url]https://repo.spring.io/milestone</url>[/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:[/b]  port: 8080
spring:
  application:
    name: spring-cloud-gateway
spring:
  cloud:
    gateway:
      routes:
      - id: xujin_route
        uri: [url]http://www.xujin.org:80/[/url]
        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提供了两种配置路由规则的方法
  • 第一:通过@Bean自定义RouteLocator
  • [Java] 纯文本查看 复制代码
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    	return builder.routes()
    			//basic proxy
    			.route(r -> r.path("/baidu")
    			.uri("http://baidu.com:80/")
    			).build();
    }

  • 第二:通过属于文件或者yml文件配置
  • [Python] 纯文本查看 复制代码
    spring:
      cloud:
        gateway:
          routes:
          - id: xujin_route
            uri: [url]http://www.xujin.org:80/[/url]
            predicates:
            - Path=/xujin

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: [url]http://www.xujin.org:80/[/url]
        predicates:
        - Path=/xujin


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马