Google Code Prettify

2021年2月18日 星期四

Spring Cloud Gateway: getting started

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,這樣就是直接導向服務所在的網址。

沒有留言:

張貼留言