關注程序員7歌,一塊兒用技術改變世界java
Nacos介紹
Nacos 是阿里巴巴開源的一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。程序員
Gateway介紹
Spring Cloud Gateway 是 Spring Cloud 的一個全新項目,該項目是基於 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術開發的網關,它旨在爲微服務架構提供一種簡單有效的統一的 API 路由管理方式。spring
Spring Cloud Gateway 做爲 Spring Cloud 生態系統中的網關,目標是替代 Netflix Zuul,其不只提供統一的路由方式,而且基於 Filter 鏈的方式提供了網關基本的功能,例如:安全,監控/指標,和限流。bootstrap
建立應用
建立一個名爲alibaba-nacos-gateway的應用,引入cloud/nacos/gateway相關依賴,pom.xml配置以下:api
<properties> <java.version>1.8</java.version> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <cloud-version>Finchley.SR1</cloud-version> <alibaba-version>0.9.0.RELEASE</alibaba-version></properties>
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <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>${cloud-version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${alibaba-version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement>
在項目的resource下面新增bootstrap.yml配置文件,配置nacos服務地址及其網關信息,配置信息以下:
瀏覽器
server: port: 8905spring: application: name: alibaba-nacos-gateway cloud: nacos: discovery: 127.0.0.1:8848 : namespace: 0df79d5a-2432-4840-a254-e946a943a6c9 gateway: routes: id: alibaba-nacos-server uri: lb://alibaba-nacos-server predicates: # 路徑匹配,以 api 開頭,直接配置是不生效的,看 filters 配置 Path=/server/** #filters: # 前綴過濾,默認配置下,咱們的請求路徑是 http://localhost:9000/myshop-service-consumer-item/** 這時會路由到指定的服務 # 此處配置去掉 1 個路徑前綴,再配置上面的 Path=/api/**,就能按照 http://localhost:9000/api/** 的方式訪問了 #- StripPrefix=1
配置解析:
安全
1.id:須要訪問的目標服務,這裏仍是以alibaba-nacos-server爲提供的服務微信
2.url: lb:目標服務在註冊中心的服務名。架構
3.predicates(斷言):其主要的目的是能夠路由到以server打頭的全部接口方法。app
修改應用的啓動類,添加註解@EnableDiscoveryClient,做用是將該服務註冊到註冊中心,代碼以下:
package com.test.alibabanacosgateway;
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
public class AlibabaNacosGatewayApplication {
public static void main(String[] args) { SpringApplication.run(AlibabaNacosGatewayApplication.class, args); }
}
經過配置context-path的方式
修改alibaba-nacos-server的bootstrap.yml配置文件,添加應用上下文信息,便是server.servlet.context-path=/server,配置以下:
server: port: 8902 servlet: /server : spring: application: name: alibaba-nacos-server cloud: nacos: discovery: 127.0.0.1:8848 : namespace: 0df79d5a-2432-4840-a254-e946a943a6c9
接下來分別啓動alibaba-nacos-server與alibaba-nacos-gateway服務,應用啓動成功後,打開nacos能夠看到兩個服務註冊成功,以下圖:
緊接着打開瀏覽器訪問:http://localhost:8905/server/test?msg=zengxueqi,能夠看到瀏覽器正常訪問alibaba-nacos-server服務接口。
訪問過程:
頁面輸入http://localhost:8905/server/test?msg=zengxueqi地址,訪問網關服務,服務根據bootstrap.yml路由配置/server進行服務轉向,從而訪問目標服務,以下圖:
經過跳過固定前綴的方式
這種方式也是springcloud gateway推薦的方式,經過跳過固定前綴的方式來路由目標服務,先刪除alibaba-nacos-server應用的bootstrap.yml配置文件配置的context-path,而後在alibaba-nacos-gateway應用的bootstrap.yml配置文件中國呢添加以下配置:
filters: # 前綴過濾,默認配置下,咱們的請求路徑是 http://localhost:9000/myshop-service-consumer-item/** 這時會路由到指定的服務 # 此處配置去掉 1 個路徑前綴,再配置上面的 Path=/api/**,就能按照 http://localhost:9000/api/** 的方式訪問了 - StripPrefix=1
filters配置的-StripPrefix用於從指定從當前位置跳過,StripPrefix設置爲1,由於url的前綴當前位置就是1,如url爲:http://localhost:8905/server/test?msg=zengxueqi,則是從server位置跳過,能夠訪問sever後面結尾的全部服務。接下來重啓兩個服務應用,刷新瀏覽器能夠看到依然正確輸出內容,以下圖:
按照這樣的方式,之後增長相關服務時,無需配置應用的context-path,只須要在網關中配置固定前綴便可。
本文分享自微信公衆號 - 程序猿的故事(zengxueqi-music)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。