SpringCloud Alibaba微服務實戰十 - 服務網關

導讀:在SpringCloud體系架構中,咱們須要部署一個單獨的網關服務對外提供訪問入口,而後網關服務根據配置好的規則將請求轉發至具體的後端服務,本章內容主要是給咱們的微服務加上網關SpringCloud Gateway。html

前言

咱們有了三個服務account-serviceproduct-serviceorder-service。如今有客戶端WEB應用APP應用須要訪問後端服務獲取數據那麼就須要在客戶端維護好三個服務的訪問路徑。image.pngjava

這樣的架構會有以下幾個典型的問題:spring

  • 每一個微服務都須要配置單獨的訪問域名,開通外網訪問權限,每新增一個服務都須要先讓運維人員配置好域名映射
  • 客戶端須要維護全部微服務的訪問地址,試想一下若是微服務有幾十幾百個呢?
  • 當服務須要對接口進行權限控制,必需要認證用戶才能調用,那麼全部的權限邏輯在服務端都要從新編寫一套。
  • 。。。

因此咱們須要在微服務以前加一個網關服務,讓全部的客戶端只要訪問網關,網關負責對請求進行轉發;將權限校驗邏輯放到網關的過濾器中,後端服務不須要再關注權限校驗的代碼;只須要對外提供一個可供外網訪問的域名地址,新增服務後也不須要再讓運維人員進行網絡配置了,這樣上面的架構就變成了以下所示:image.pngapache

建立網關模塊

在項目中創建cloud-gateway模塊, spring-cloud-gateway 做爲微服務體系中的一環也須要將自身註冊進Nacos並集成Nacos配置中心。後端

  • pom.xml
<?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">
    <parent>
        <artifactId>cloud-aliaba</artifactId>
        <groupId>com.jianzh5.cloud</groupId>
        <version>1.0.0</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-gateway</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

    </dependencies>

</project>複製代碼

  • 啓動類
@SpringBootApplication
@EnableDiscoveryClient
public class GateWayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GateWayApplication.class, args);
    }
}複製代碼

  • bootstap.yml
spring:
  application:
    name: cloud-gateway
  cloud:
    nacos:
      config:
        server-addr: 10.0.10.48:8848
        file-extension: yml
        namespace: 7e8ccc22-6f51-42fa-bcf1-db45f99dbf57複製代碼

  • 在nacos中創建網關的路由配置
server:
  port: 8090
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 10.0.10.48:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
      - id: product-service
        uri: lb://product-service
        predicates:
          - Path=/product/**
      - id: account-service
        uri: lb://account-service
        predicates:
          - Path=/account/**
      - id: order-service
        uri: lb://order-service
        predicates:
          - Path=/order/**複製代碼

配置詳解:微信

id: 在全部路由定義中須要惟一,不能重複
uri: lb:// lb://爲固定寫法,表示開啓負載均衡; 即服務在Nacos中註冊的名字
predicates:- Path=/product/ 使用"Path Route Predicate Factory",規則爲/product/ 的請求都還轉發至微服務product-service中。網絡

上面的配置邏輯爲:
① 以http://localhost:8090/product/** 的訪問路徑會轉發到product-service微服務的/**
② 以http://localhost:8090/account/** 的訪問路徑會轉發到account-service微服務的/**
③ 以http://localhost:8090/order/** 的訪問路徑會轉發到order-service微服務的/**架構

  • 啓動全部服務,確認是否轉發
    image.png

好了,各位朋友們,本期的內容到此就所有結束啦,能看到這裏的同窗都是優秀的同窗,下一個升職加薪的就是你了!若是以爲這篇文章對你有所幫助的話請掃描下面二維碼加個關注。"轉發" 加 "在看",養成好習慣!我們下期再見!image.pngapp

系列文章負載均衡

歡迎掃碼關注微信公衆號或 我的博客

相關文章
相關標籤/搜索