條件路由規則

條件路由規則會將符合特定條件的請求轉發到目標實例的子集。規則會匹配進來流量的請求參數,並將符合匹配條件的請求轉發到包含特定實例地址列表的子集。

以下是一個條件路由規則的示例。

基於以下範例規則,所有對 `org.apache.dubbo.samples.CommentService` 服務中 `getComment` 方法的調用都將轉發到標記為 `region=Hangzhou` 的地址子集。

configVersion: v3.0
scope: service
force: true
runtime: true
enabled: true
key: org.apache.dubbo.samples.CommentService
conditions:
  - method=getComment => region=Hangzhou

您可以參考條件路由的具體範例代碼 這裡

條件規則

條件路由規則的主體定義了路由規則將生效的目標服務或應用程式、流量過濾條件以及在某些特定情況下的行為。

欄位類型說明必要
configVersion字串條件規則定義的版本,目前可用版本為 `v3.0`
scope字串支援 `service` 和 `application` 範圍規則。
key字串此規則即將套用的目標服務或應用程式的識別碼。

- 如果設定為 `scope:service`,則應將 `key` 指定為此規則要控制的 Dubbo 服務金鑰。
- 如果設定為 `scope:application`,則應將 `key` 指定為此規則要控制的應用程式名稱,應用程式應始終為 Dubbo Consumer。
enabled布林值是否啟用此規則,設定為 `enabled:false` 以停用此規則。
conditions字串[]此配置的條件路由規則定義。有關詳細資訊,請查看 條件
force布林值路由後實例子集為空時的行為。`true` 表示返回無提供者異常,而 `false` 表示忽略此規則。
runtime布林值每次 RPC 呼叫是否執行路由規則,或使用可用的路由快取。

條件

Condition 作為條件路由規則的主體,其類型為字串,具有複合結構,例如 method=getComment => region=Hangzhou。這裡

  • => 符號前的條件表示請求參數匹配條件。指定的匹配條件會與消費者的請求上下文 (URL) 甚至方法參數進行比較。當消費者滿足匹配條件時,條件後面的地址子集過濾規則將應用於消費者。
  • => 符號後的條件表示地址子集過濾條件。指定的過濾條件會與提供者實例地址 (URL) 進行比較。消費者只能訪問符合過濾條件的實例,確保流量僅發送到符合條件的地址子集。
    • 如果匹配條件為空,則表示該規則適用於所有請求,例如:=> status != staging
    • 如果過濾條件為空,則拒絕來自相應請求的訪問,例如:application = product =>

匹配/過濾條件

支援的參數

  • 服務呼叫上下文,例如介面、方法、群組、版本等。
  • 請求上下文,例如 attachments[key] = value。
  • 方法參數,例如 arguments[0] = tom。
  • URL 本身中的欄位,例如 protocol、host、port 等。
  • URL 上的附加參數,例如 application、organization 等。
  • 支援開發人員自定義的擴充功能。

支援的條件

  • 等號 (=) 表示「匹配」,例如:method = getComment。
  • 不等號 (!=) 表示「不匹配」,例如:method != getComment。

支援的值

  • 以逗號 (,) 分隔的多個值,例如:host != 10.20.153.10,10.20.153.11。
  • 以星號 (*) 結尾表示萬用字元匹配,例如:host != 10.20..*。
  • 以錢幣符號 ($) 開頭表示引用消費者參數,例如:region = $region。
  • 整數值範圍,例如:userId = 1~100,userId = 101~。
  • 支援開發人員自定義的擴充功能。

上次修改時間 2024 年 1 月 11 日:增強條件路由規則文件 (#2901) (2fe914296a3)