前言
本文旨在介紹spring Cloud Gateway概念,附帶簡單入門使用。
目錄
- 1、什麼是閘道器?
- 2、什麼時候用閘道器?
- 3、什麼地方用閘道器?
- 4、為什麼用閘道器?
- 5、Spring Cloud GateWay作用?
- 6、Spring Cloud GateWay簡單入門?
1.什麼是閘道器
此處說的閘道器不是網路裝置中的閘道器,而是API閘道器。
API閘道器:簡單來說,API閘道器就是客戶端訪問系統的唯一入口,其託管了所有微服務API的分發,其應該提供
完整的API釋出、管理、維護生命週期管理,並且API閘道器可以對使用者請求進行過濾,攔截,改造、分發等功能。
複製程式碼
2、什麼時候用API閘道器?
一般我們使用分散式系統或者微服務系統時,會使用閘道器,便於管理API路由,對系統安全進行保障。
複製程式碼
3、什麼地方用閘道器?
就目前我接觸的專案中,我只在微服務中使用過閘道器(SpringCloud Gateway)
複製程式碼
4、為什麼使用閘道器?
閘道器提供了對系統API、使用者請求統一管理的功能,如果沒有閘道器,我們需要在每個子系統中對使用者請求進行鑑權,過濾等操作,
當子系統很多的時候,維護起來很艱難,而遵從程式碼複用原則以及程式碼解耦原則我們也更應該把這些與業務操作無關的工作抽
離出來,所以閘道器的使用是非常有必要的。
複製程式碼
5、Spring Cloud GateWay簡介與作用?
簡介:
Spring Cloud GateWay是Spring Cloud 中的一個專案,提供了一個用於在Spring MVC之上構建API閘道器的庫。Spring Cloud
Gateway旨在提供一種簡單而有效的方式來路由到API,併為他們提供橫切關注點,例如:安全性,監控/指標和彈性。
複製程式碼
特徵功能有:
基於Spring Framework 5,Project Reactor和Spring Boot 2.0構建
能夠匹配任何請求屬性上的路由。
謂詞和過濾器特定於路線。
Hystrix斷路器整合。
Spring Cloud DiscoveryClient整合
易於編寫謂詞和過濾器
請求率限制
路徑重寫
複製程式碼
6、Spring Cloud GateWay簡單入門(搭建)?
建立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:
server:
port: 8004
spring:
application:
name: service-gateway
cloud:
gateway:
discovery:
locator:
enabled: true
#註冊到服務中心
nacos:
discovery:
server-addr: 127.0.0.1:8848
複製程式碼
@EnableDiscoveryClient啟動客戶端:
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
複製程式碼
檢測:啟動專案,在nacos上可以看到閘道器服務已啟動
至此閘道器搭建成功!