本文介紹如何使用Nacos來搭建基於Spring Cloud Gateway或Spring Cloud Netflix Zuul的服務網關。
準備工作
下載Maven並設定環境變數。(已經操作的可略過)
下載最新版本下載地址Nacos Server。(已經操作的可以略過)
解壓下載的Nacos Server壓縮包。
進入
nacos/bin
目錄,啟動Nacos Server。Linux/Unix/Mac系統:執行命令
sh startup.sh -m standalone
。Windows系統:雙擊執行
startup.cmd
檔案。
Demo應用
本地開發中主要描述開發中涉及的關鍵資訊,如果您想瞭解完整的Spring Cloud程式,可下載spring-cloud-gateway-nacos、spring-cloud-zuul-nacos和nacos-service-provider。
可選:
基於Spring Cloud Gateway搭建服務網關
介紹如何使用Nacos基於Spring Cloud Gateway從零搭建應用的服務網關。
建立服務網關。
建立命名為
spring-cloud-gateway-nacos
的Maven工程。在
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>
開發服務網關啟動類
GatewayApplication
。@SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
在
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
執行啟動類
GatewayApplication
中的main函數,啟動Gateway。登入本地啟動的Nacos Server控制台http://127.0.0.1:8848/nacos(本地Nacos控制台的預設使用者名和密碼同為nacos),在左側導覽列中選擇 ,可以看到服務列表中已經包含了spring-cloud-gateway-nacos,且在詳情中可以查詢該服務的詳情。表明網關已經啟動並註冊成功,接下來我們將通過建立一個下遊服務來驗證網關的請求轉寄功能。
建立服務提供者。
建立一個服務提供者的應用,請參見實現服務註冊與發現。
服務提供者樣本:
@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; } } }
結果驗證。
本地驗證。
本地啟動開發好的服務網關和服務提供者,通過訪問Spring Cloud Gateway將請求轉寄給後端服務,可以看到調用成功的結果。
在EDAS中驗證。
您可以將應用部署到EDAS,並驗證。具體操作,請參見實現服務註冊與發現。
EDAS服務註冊中心提供了正式商用版本Nacos。當您將應用部署到EDAS的時候,EDAS會直接替換本地Nacos Server的地址和服務連接埠,以及namespace、access-key、secret-key、context-path資訊。您無需進行任何額外的配置,原有的配置內容可以選擇保留或刪除。
基於Zuul搭建服務網關
介紹如何基於Zuul使用Nacos作為服務註冊中心從零搭建應用的服務網關。
建立服務網關。
建立命名為
spring-cloud-zuul-nacos
的Maven工程。在
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>
開發服務網關啟動類
ZuulApplication
。@SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }
在
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
執行spring-cloud-zuul-nacos中的main函數
ZuulApplication
,啟動服務。登入本地啟動的Nacos Server控制台http://127.0.0.1:8848/nacos (本地Nacos控制台的預設使用者名和密碼同為nacos),在左側導覽列中選擇服務管理 > 服務列表,可以看到服務列表中已經包含了spring-cloud-zuul-nacos,且在詳情中可以查詢該服務的詳情。表明網關已經啟動並註冊成功,接下來我們將通過建立一個下遊服務來驗證網關的請求轉寄功能。
建立服務提供者。
如何快速建立一個服務提供者,請參見實現服務註冊與發現。
服務提供者啟動類樣本:
@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; } } }
結果驗證。
本地驗證。
本地啟動開發好的服務網關Zuul和服務提供者,通過訪問Spring Cloud Netflix 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版本的生命週期已結束,不推薦使用這個版本開發應用。