Phân tích toàn diện Spring Cloud: Cơ chế xác định trong Gateway

Cơ chế xác định (Predicate) trong Gateway

Spring Gateway cung cấp nhiều phương thức xác định khác nhau để định tuyến yêu cầu.

Xác định After

After sẽ khớp với các yêu cầu xảy ra sau thời điểm hiện tại.

spring:
  cloud:
    gateway:
      routes:
      - id: route_after
        uri: https://example.org
        predicates:
        - After=2023-01-15T10:30:00.000+07:00[Asia/Ho_Chi_Minh]
Xác định Before

Before sẽ khớp với các yêu cầu xảy ra trước thời điểm hiện tại.

spring:
  cloud:
    gateway:
      routes:
      - id: route_before
        uri: https://example.org
        predicates:
        - Before=2023-01-15T10:30:00.000+07:00[Asia/Ho_Chi_Minh]
Xác định Between

Between sẽ khớp với các yêu cầu xảy ra trong khoảng thời gian giữa hai mốc thời gian.

spring:
  cloud:
    gateway:
      routes:
      - id: route_between
        uri: https://example.org
        predicates:
        - Between=2023-01-15T10:30:00.000+07:00[Asia/Ho_Chi_Minh], 2023-01-16T10:30:00.000+07:00[Asia/Ho_Chi_Minh]
Xác định Cookie

Cookie khớp dựa trên tên và giá trị biểu thức chính quy của cookie.

spring:
  cloud:
    gateway:
      routes:
      - id: route_cookie
        uri: https://example.org
        predicates:
        - Cookie=ten_dang_nhap, nguyen_van_a  # ten_dang_nhap là tên cookie, nguyen_van_a là biểu thức chính quy cho giá trị
Xác định Header

Header khớp dựa trên tên và biểu thức chính quy của giá trị trong header yêu cầu.

spring:
  cloud:
    gateway:
      routes:
      - id: route_header
        uri: https://example.org
        predicates:
        - Header=X-Request-ID, \d+  # X-Request-ID là tên header, \d+ là biểu thức chính quy cho giá trị
Xác định Host

Host thực hiện khớp tên miền theo mẫu Ant.

spring:
  cloud:
    gateway:
      routes:
      - id: route_host
        uri: https://example.org
        predicates:
        - Host=**.mohost.org,**.khacnha.org
Xác định Method

Method khớp với phương thức HTTP.

spring:
  cloud:
    gateway:
      routes:
      - id: route_method
        uri: https://example.org
        predicates:
        - Method=GET,POST
Xác định Path

Path thực hiện khớp đường dẫn.

spring:
  cloud:
    gateway:
      routes:
      - id: route_path
        uri: https://example.org
        predicates:
        - Path=/dau/{phan},/cuoi/{phan}
Xác định Query

Query khớp với tham số truy vấn.

spring:
  cloud:
    gateway:
      routes:
      - id: route_query
        uri: https://example.org
        predicates:
        - Query=thamso, ba.  # Nếu tham số truy vấn là thamso và giá trị khớp biểu thức ba.
Xác định ReadBody

ReadBody cho phép đọc và kiểm tra nội dung body của yêu cầu.

Xác định RemoteAddr

RemoteAddr khớp với địa chỉ từ xa.

spring:
  cloud:
    gateway:
      routes:
      - id: route_remote
        uri: https://example.org
        predicates:
        - RemoteAddr=192.168.1.0/24
Xác định Weight

Weight xác định dựa trên trọng số, nhận hai tham số nhóm và trọng số. Trọng số được tính theo nhóm.

spring:
  cloud:
    gateway:
      routes:
      - id: route_nhom_cao
        uri: https://nhomcao.org
        predicates:
        - Weight=nhom1, 8
      - id: route_nhom_thap
        uri: https://nhomthap.org
        predicates:
        - Weight=nhom1, 2     # nhom1 là tên nhóm, 80% yêu cầu sẽ truy cập https://nhomcao.org, 20% sẽ truy cập https://nhomthap.org
Xác định CloudFoundryRouteService

CloudFoundryRouteService dành cho môi trường Cloud Foundry.

Cách cấu hình

Có hai cách cấu hình xác định trong gateway:

Lấy xác định Cookie làm ví dụ, lớp cấu hình như sau:

public static class CauHinh {

   @NotEmpty
   private String ten;

   @NotEmpty
   private String bieuThucChinhQuy;

   public String getTen() {
      return ten;
   }

   public CauHinh setTen(String ten) {
      this.ten = ten;
      return this;
   }

   public String getBieuThucChinhQuy() {
      return bieuThucChinhQuy;
   }

   public CauHinh setBieuThucChinhQuy(String bieuThucChinhQuy) {
      this.bieuThucChinhQuy = bieuThucChinhQuy;
      return this;
   }

}
  • Cấu hình rút gọn

Giữa tên xác định và tham số là =, nhiều tham số cách nhau bởi ,, gán giá trị theo thứ tự định nghĩa

spring:
  cloud:
    gateway:
      routes:
      - id: route_cookie
        uri: https://example.org
        predicates:
        - Cookie=cookie_cua_toi,giatri_cookie

  • Cấu hình đầy đủ

Mỗi tham số sử dụng ten_tham_so:gia_tri để biểu thị

spring:
  cloud:
    gateway:
      routes:
      - id: route_cookie
        uri: https://example.org
        predicates:
        - name: Cookie
          args:
            ten: cookie_cua_toi
            bieuThucChinhQuy: giatri_cookie

Thẻ: Spring Cloud Gateway Predicate Routing Microservices

Đăng vào ngày 18 tháng 5 lúc 00:00