有時間,我們在搭建微服務時,總希望拿一個比較單純的,沒有污染其它代碼的項目來從頭開始做,今天我們來建設一個最簡單的,gateway項目,它被註冊到nacos里,路由配置也存到nacos里,動態實現更新配置功能。 # 依賴配置 > 版本:com.alibaba.cloud:spring-cloud-s ...
有時間,我們在搭建微服務時,總希望拿一個比較單純的,沒有污染其它代碼的項目來從頭開始做,今天我們來建設一個最簡單的,gateway項目,它被註冊到nacos里,路由配置也存到nacos里,動態實現更新配置功能。
依賴配置
版本:com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2021.0.1.0,com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2021.0.1.0,org.springframework.cloud:spring-cloud-starter-gateway:3.1.3
<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>
<!-- 解決nacos的配置文件不載入問題-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- 這個負載均衡如果不引入,在使用lb://時將出現503的錯誤-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
</dependencies>
bootstrap.yml配置
spring:
application:
name: lind-gateway
cloud:
nacos:
config:
server-addr: 192.168.xx.xx:8848
groupId: DEFAULT_GROUP
namespace: public
file-extension: yaml #對應nacos上面的配置文件擴展名
discovery:
server-addr: 192.168.xx.xx:8848
logging:
level:
root: warn
org.springframework.cloud.gateway: debug #日誌級別,方便調試
org.alibaba.nacos: debug
nacos里的lind-gateway.yaml配置
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: micro-product
uri: lb://micro-product
predicates:
- Path=/product/**
- id: micro-account
uri: lb://micro-account
predicates:
- Path=/account/**
- id: micro-order
uri: lb://micro-order
predicates:
- Path=/order/**
default-filters:
- StripPrefix=1 #請求地址去掉第1位,例如你請求/product/md/create時,實際轉發到micro-product服務里的介面是/md/create
需要註意的地方
- pom引用包時,需要添加spring-cloud-loadbalancer,以在gateway中實現負載協議
- 使用nacos配置時,需要添加spring-cloud-starter-bootstrap
- 如果是多級路徑轉發,載入添加StripPrefix,將可以在轉發到後端時,將路徑的前幾位去除
測試
- 調用micro-product中的介面:http://localhost:8080/product/stock/deduct?commodityCode=product-1&count=1
- 介面代碼
@RequestMapping(path = "/stock/deduct")
public Boolean deduct(String commodityCode, Integer count) {
stockService.deduct(commodityCode, count);
return true;
}
- 正常響應
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!