全部產品
Search
文件中心

Enterprise Distributed Application Service:搭建服務網關

更新時間:Jun 30, 2024

本文介紹如何使用Nacos來搭建基於Spring Cloud Gateway或Spring Cloud Netflix Zuul的服務網關。

準備工作

  • 下載Maven並設定環境變數。(已經操作的可略過)

  • 下載最新版本下載地址Nacos Server。(已經操作的可以略過)

    1. 解壓下載的Nacos Server壓縮包。

    2. 進入nacos/bin目錄,啟動Nacos Server。

      • Linux/Unix/Mac系統:執行命令sh startup.sh -m standalone

      • Windows系統:雙擊執行startup.cmd檔案。

  • Demo應用

    本地開發中主要描述開發中涉及的關鍵資訊,如果您想瞭解完整的Spring Cloud程式,可下載spring-cloud-gateway-nacosspring-cloud-zuul-nacosnacos-service-provider

  • 可選:

基於Spring Cloud Gateway搭建服務網關

介紹如何使用Nacos基於Spring Cloud Gateway從零搭建應用的服務網關。

  1. 建立服務網關。

    1. 建立命名為spring-cloud-gateway-nacos的Maven工程。

    2. pom.xml檔案中添加Spring Boot和Spring Cloud的依賴。

      以Spring Boot 2.1.4.RELEASE和Spring Cloud Greenwich.SR1版本為例。

       <parent>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
           <version>2.1.4.RELEASE</version>
           <relativePath/>
       </parent>
      
       <dependencies>
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-gateway</artifactId>
           </dependency>
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
               <version>2.1.1.RELEASE</version>
           </dependency>
       </dependencies>
      
       <dependencyManagement>
           <dependencies>
               <dependency>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-dependencies</artifactId>
                   <version>Greenwich.SR1</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>                                
    3. 開發服務網關啟動類GatewayApplication

          @SpringBootApplication
          @EnableDiscoveryClient
          public class GatewayApplication {
              public static void main(String[] args) {
                  SpringApplication.run(GatewayApplication.class, args);
              }
          }                                
    4. application.yaml中添加如下配置,將註冊中心指定為Nacos Server的地址。

      其中127.0.0.1:8848為Nacos Server的地址。如果您的Nacos Server部署在另外一台機器,則需要修改成對應的地址。

      其中routes配置了Gateway的路由轉寄策略,這裡我們配置將所有首碼為/provider1/的請求都路由到服務名為service-provider的後端服務中。

      server:
       port: 18012
      
      spring:
       application:
              name: spring-cloud-gateway-nacos
       cloud:
              gateway: # config the routes for gateway
                routes:
                - id: service-provider          #將/provider1/開頭的請求轉寄到provider1
                  uri: lb://service-provider
                  predicates:
                  - Path=/provider1/**
                  filters:
                  - StripPrefix=1               #表明首碼/provider1需要截取掉
              nacos:
                discovery:
                  server-addr: 127.0.0.1:8848                               
    5. 執行啟動類GatewayApplication中的main函數,啟動Gateway。

    6. 登入本地啟動的Nacos Server控制台http://127.0.0.1:8848/nacos(本地Nacos控制台的預設使用者名和密碼同為nacos),在左側導覽列中選擇服務管理 > 服務列表,可以看到服務列表中已經包含了spring-cloud-gateway-nacos,且在詳情中可以查詢該服務的詳情。表明網關已經啟動並註冊成功,接下來我們將通過建立一個下遊服務來驗證網關的請求轉寄功能。

  2. 建立服務提供者。

    建立一個服務提供者的應用,請參見實現服務註冊與發現

    服務提供者樣本:

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {
    
        public static void main(String[] args) {
    
            SpringApplication.run(ProviderApplication, args);
        }
    
        @RestController
        public class EchoController {
            @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
            public String echo(@PathVariable String string) {
                return string;
            }
        }
    }                        
  3. 結果驗證。

    • 本地驗證。

      本地啟動開發好的服務網關和服務提供者,通過訪問Spring Cloud Gateway將請求轉寄給後端服務,可以看到調用成功的結果。

      EDAS SpringCloud應用開發之搭建服務網管

    • EDAS中驗證。

      您可以將應用部署到EDAS,並驗證。具體操作,請參見實現服務註冊與發現

      EDAS服務註冊中心提供了正式商用版本Nacos。當您將應用部署到EDAS的時候,EDAS會直接替換本地Nacos Server的地址和服務連接埠,以及namespace、access-key、secret-key、context-path資訊。您無需進行任何額外的配置,原有的配置內容可以選擇保留或刪除。

基於Zuul搭建服務網關

介紹如何基於Zuul使用Nacos作為服務註冊中心從零搭建應用的服務網關。

  1. 建立服務網關。

    1. 建立命名為spring-cloud-zuul-nacos的Maven工程。

    2. pom.xml檔案中添加Spring Boot、Spring Cloud和Spring Cloud Alibaba的依賴。

      請添加Spring Boot 2.1.4.RELEASE、Spring Cloud Greenwich.SR1和Spring Cloud Alibaba 0.9.0版本依賴。

       <parent>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
           <version>2.1.4.RELEASE</version>
           <relativePath/>
       </parent>
      
       <dependencies>
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-webflux</artifactId>
           </dependency>
      
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
           </dependency>
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
               <version>2.1.1.RELEASE</version>
           </dependency>
       </dependencies>
      
       <dependencyManagement>
           <dependencies>
               <dependency>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-dependencies</artifactId>
                   <version>Greenwich.SR1</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>                                
    3. 開發服務網關啟動類ZuulApplication

          @SpringBootApplication
          @EnableZuulProxy
          @EnableDiscoveryClient
          public class ZuulApplication {
              public static void main(String[] args) {
                  SpringApplication.run(ZuulApplication.class, args);
              }
          }                                
    4. application.properties中添加如下配置,將註冊中心指定為Nacos Server的地址。

      其中127.0.0.1:8848為Nacos Server的地址。如果您的Nacos Server部署在另外一台機器,則需要修改成對應的地址。

      其中routes配置了Zuul的路由轉寄策略,這裡我們配置將所有首碼為/provider1/的請求都路由到服務名為service-provider的後端服務中。

       spring.application.name=spring-cloud-zuul-nacos
       server.port=18022
      
       spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
      
       zuul.routes.opensource-provider1.path=/provider1/**
       zuul.routes.opensource-provider1.serviceId=service-provider                                
    5. 執行spring-cloud-zuul-nacos中的main函數ZuulApplication,啟動服務。

    6. 登入本地啟動的Nacos Server控制台http://127.0.0.1:8848/nacos (本地Nacos控制台的預設使用者名和密碼同為nacos),在左側導覽列中選擇服務管理 > 服務列表,可以看到服務列表中已經包含了spring-cloud-zuul-nacos,且在詳情中可以查詢該服務的詳情。表明網關已經啟動並註冊成功,接下來我們將通過建立一個下遊服務來驗證網關的請求轉寄功能。

  2. 建立服務提供者。

    如何快速建立一個服務提供者,請參見實現服務註冊與發現

    服務提供者啟動類樣本:

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {
    
        public static void main(String[] args) {
    
            SpringApplication.run(ProviderApplication, args);
        }
    
        @RestController
        public class EchoController {
            @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
            public String echo(@PathVariable String string) {
                return string;
            }
        }
    }                        
  3. 結果驗證。

    • 本地驗證。

      本地啟動開發好的服務網關Zuul和服務提供者,通過訪問Spring Cloud Netflix Zuul將請求轉寄給後端服務,可以看到調用成功的結果。

      EDAS SpringCloud應用開發之搭建Zuul網管

    • EDAS中驗證。

      您將應用部署到EDAS,並驗證。具體操作,請參見實現服務註冊與發現

      EDAS服務註冊中心提供了正式商用版本Nacos。當您將應用部署到EDAS的時候,EDAS會直接替換本地Nacos Server的地址和服務連接埠,以及namespace、access-key、secret-key、context-path資訊。您無需進行任何額外的配置,原有的配置內容可以選擇保留或刪除。

版本說明

  • 樣本中使用的Spring Cloud版本為Greenwich,對應的Spring Cloud Alibaba版本為2.1.1.RELEASE。

  • Spring Cloud Finchley對應的Spring Cloud Alibaba版本為2.0.1.RELEASE。

  • Spring Cloud Edgware對應的Spring Cloud Alibaba版本為1.5.1.RELEASE。

說明

Spring Cloud Edgware版本的生命週期已結束,不推薦使用這個版本開發應用。