SpringCloud 是微服务中的翘楚,最佳的落地方案。
Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul。网关通常在项目中为了简化
前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度;具体作用就是转发服务,接收并转发所有内外
部的客户端调用;其他常见的功能还有权限认证,限流控制等等。
本博客会提到网关的基本转发功能,熔断功能,限流功能以及功能的综合使用。
源码GitHub地址:https://github.com/intomylife/SpringCloud
环境JDK 1.8.0 +
Maven 3.0 +
SpringBoot 2.0.3
SpringCloud Finchley.RELEASE
Redis 3.0 +
开发工具IntelliJ IDEA
正文 commons 工程 commons 工程 - POM 文件 <?xml version="1.0" encoding="UTF-8"?> <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 "> <modelVersion>4.0.0</modelVersion> <!-- 三坐标 --> <groupId>com.zwc</groupId> <artifactId>springcloud-gateway-commons</artifactId> <version>1.0</version> <!-- 工程名称和描述 --> <name>springcloud-gateway-commons</name> <description>公用工程</description> <!-- 打包方式 --> <packaging>jar</packaging> <!-- 在 properties 下声明相应的版本信息,然后在 dependency 下引用的时候用 ${} 就可以引入该版本 jar 包了 --> <properties> <!-- 编码 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- jdk --> <java.version>1.8</java.version> <!-- SpringBoot --> <platform-bom.version>Cairo-SR3</platform-bom.version> <!-- SpringCloud --> <spring-cloud-dependencies.version>Finchley.RELEASE</spring-cloud-dependencies.version> </properties> <!-- 加入依赖 --> <dependencies> </dependencies> <!-- 依赖 jar 包版本管理的管理器 --> <!-- 如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven 就此处来找版本声明。 --> <!-- 如果有,就会继承它;如果没有就会报错,告诉你没有版本信息 --> <!-- 优先级:如果 dependencies 里的 dependency 已经声明了版本信息,就不会生效此处的版本信息了 --> <dependencyManagement> <dependencies> <!-- SpringBoot --> <dependency> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>${platform-bom.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringCloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud-dependencies.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 插件依赖 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>配置一些共用依赖
commons 工程 - 项目结构 service 工程**① 此工程下有四个模块:一个注册中心,一个网关以及两个提供者
② 两个提供者除端口不一致以外,其他代码基本一致
registry-service(注册中心) registry-service - POM 文件 <?xml version="1.0" encoding="UTF-8"?> <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 "> <modelVersion>4.0.0</modelVersion> <!-- 继承父 --> <parent> <groupId>com.zwc</groupId> <artifactId>springcloud-gateway-service</artifactId> <version>1.0</version> </parent> <!-- 三坐标 --> <groupId>com.zwc</groupId> <artifactId>springcloud-gateway-registry-service</artifactId> <version>1.0</version> <!-- 工程名称描述 --> <name>springcloud-gateway-registry-service</name> <description>注册中心</description> <!-- 打包方式 --> <packaging>jar</packaging> <!-- 在 properties下声明相应的版本信息,然后在dependency下引用的时候用 ${} 就可以引入该版本jar包了 --> <properties> </properties> <!-- 加入依赖 --> <dependencies> <!-- 服务注册中心 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <!-- 插件依赖 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>