Spring Cloud 在 2020 年用 Gateway 取代原本的網關 Zuul,新的網關 Gateway 功能更強,效率更高,對 developer 來說,使用上是一樣的簡單。
如上圖是我的環境,我的所有服務放在一台 CentOS 7 上的 Docker 裡,Docker 上有服務註冊的 consul,有提供服務的 wealth-system,這個服務當輸入 http://192.168.50.13:8080/customer/E243350588 會傳回客戶的基本資料。現在要來看 gateway 怎麼寫 …
** 建立一個 spring boot 專案 **
在 build.gradle 的 dependencies 中加入以下內容,以導入所需要的 jar 檔。
implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery' implementation 'org.springframework.cloud:spring-cloud-starter-gateway' implementation 'org.springframework.boot:spring-boot-starter-actuator'
- 第 1 行是 consul 註冊、查詢服務所需要的 jar 檔
- 第 2 行是導入新版 gateway
- 第 3 行是 health check 所需要的 jar 檔
server:
servlet:
context-path: /
port: 80
management:
server:
base-path: /
port: 5001
endpoint:
health:
probes:
enabled: true
show-details: always
spring:
application:
name: fstop-gateway
profiles:
active: ${SPRING_PROFILES_ACTIVE}
main:
banner-mode: off
cloud:
consul:
enabled: true
host: 192.168.50.13
port: 8500
discovery:
prefer-ip-address: true
instance-id: ${spring.application.name}:${random.value}
register-health-check: true
health-check-path: /actuator/health
health-check-interval: 30s
tags: ${spring.application.name}
gateway:
routes:
- id: wealth
uri: lb://wealth-system
predicates:
- Path=/customer/**
上面是 application.yml 的內容,說明如下:
- 第 24~34 行,將 gateway 註冊到 consul,如果不註冊到 consul,就無法使用 consul 的服務查詢功能。
- 第 35~40 行是 gateway 的設定,第 37 行只是個標識 (命名),取個有意義的名稱即可,第 38 行指出,當網址有 /customer/** 時,導向 wealth-system 這個服務。特別注意,這裡寫的是 lb://wealth-system (lb: load balance),就是要使用 consul 提供的服務發現的方式導向,也可以寫成 http://192.168.50.8080,這樣就是直接導向服務所在的網址。

沒有留言:
張貼留言