本文旨在介紹spring Cloud Gateway概念,附帶簡單入門使用。java
此處說的網關不是網絡設備中的網關,而是API網關。
API網關:簡單來講,API網關就是客戶端訪問系統的惟一入口,其託管了全部微服務API的分發,其應該提供
完整的API發佈、管理、維護生命週期管理,而且API網關能夠對用戶請求進行過濾,攔截,改造、分發等功能。
複製代碼
通常咱們使用分佈式系統或者微服務系統時,會使用網關,便於管理API路由,對系統安全進行保障。
複製代碼
就目前我接觸的項目中,我只在微服務中使用過網關(SpringCloud Gateway)
複製代碼
網關提供了對系統API、用戶請求統一管理的功能,若是沒有網關,咱們須要在每一個子系統中對用戶請求進行鑑權,過濾等操做,
當子系統不少的時候,維護起來很艱難,而聽從代碼複用原則以及代碼解耦原則咱們也更應該把這些與業務操做無關的工做抽
離出來,因此網關的使用是很是有必要的。
複製代碼
簡介:spring
Spring Cloud GateWay是Spring Cloud 中的一個項目,提供了一個用於在Spring MVC之上構建API網關的庫。Spring Cloud
Gateway旨在提供一種簡單而有效的方式來路由到API,併爲他們提供橫切關注點,例如:安全性,監控/指標和彈性。
複製代碼
特徵功能有:apache
基於Spring Framework 5,Project Reactor和Spring Boot 2.0構建
可以匹配任何請求屬性上的路由。
謂詞和過濾器特定於路線。
Hystrix斷路器集成。
Spring Cloud DiscoveryClient集成
易於編寫謂詞和過濾器
請求率限制
路徑重寫
複製代碼
建立springboot項目,導入依賴:此處應該注意springboot版本問題,低版本是不支持的。
nacos:服務發現與管理(Eureka中止維護)
Feign:服務間調用、負載均衡(整合ribbon)安全
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.miniwan</groupId>
<artifactId>gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gateway</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--使用Feign進行服務間調用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--使用nacos服務管理-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.1.RELEASE</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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
複製代碼
配置yml:springboot
server:
port: 8004
spring:
application:
name: service-gateway
cloud:
gateway:
discovery:
locator:
enabled: true
#註冊到服務中心
nacos:
discovery:
server-addr: 127.0.0.1:8848
複製代碼
@EnableDiscoveryClient啓動客戶端:bash
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
複製代碼
檢測:啓動項目,在nacos上能夠看到網關服務已啓動 網絡
至此網關搭建成功!app