基於 Dubbo-Admin 實現根據請求條件路由

来源:https://www.cnblogs.com/apache-dubbo/archive/2022/12/22/16997735.html
-Advertisement-
Play Games

在日常的開發工作中,為了保證落庫數據的完整性,參數校驗絕對是必不可少的一部分,本篇文章就來講解下在項目中該如何優雅的校驗參數。 假設有一個新增學員的介面,一般第一步我們都會先校驗學員信息是否正確,然後才會落庫,簡單起見,假設新增學員時只有2個欄位:姓名、年齡。 @Data public class ...


Dubbo提供動態創建條件路由的服務治理能力,可以在無需重啟應用的情況下,根據請求發起方、請求的方法條件路由。

Dubbo可以通過XML配置,註解配置,動態配置實現動態根據請求條件路由,這裡主要介紹動態配置的方式,其他配置方式請參考舊文檔配置

開始之前

請確保成功運行Dubbo-Admin

背景信息

在業務場景如黑白名單,排除預發佈機,只暴露部分機器,分環境隔離等,需要路由規則在發起RPC調用前過濾目標伺服器地址,過濾後的地址作為最終發起RPC調用的備選地址。Dubbo-Admin提供條件路由的能力,能夠幫助您配置路由規則,滿足業務場景。

操作步驟

條件路由

  1. 登錄Dubbo-Admin控制台
  2. 在左側導航欄選擇服務治理 > 條件路由。
  3. 點擊創建按鈕,在創建新路由規則面板中,填寫規則內容,然後單擊保存。

規則詳解

配置模板
---
scope: application/service
force: true
runtime: true
enabled: true
key: app-name/group+service+version
conditions:
  - application=app1 => address=*:20880
  - method=sayHello => address=*:20880

對於條件路由場景,只需要理清楚以下問題基本就知道配置該怎麼寫了:

  1. 要修改消費者應用的配置還是某個服務的配置。
    • 應用:scope: application, key: app-name(還可使用services指定某幾個服務)。
    • 服務:scope: service, key:group+service+version
  2. 當路由結果為空,是否強制返回。
    • force=false: 當路由結果為空,降級請求tag為空的提供者。
    • force=true: 當路由結果為空,直接返回異常。
  3. 路由規則的優先順序
    • priority=1: 路由規則的優先順序,用於排序,優先順序越大越靠前執行,可不填,預設為 0。
  4. 配置是否只對某幾個特定實例生效。
    • 所有實例:addresses: ["0.0.0.0"] addresses: ["0.0.0.0:*"] 具體由side值決定。
    • 指定實例:addersses[實例地址列表]
  5. 要修改的條件規則。
    • => 之前的為消費者匹配條件,所有參數和消費者的 URL 進行對比,當消費者滿足匹配條件時,對該消費者執行後面的過濾規則。
    • => 之後為提供者地址列表的過濾條件,所有參數和提供者的 URL 進行對比,消費者最終只拿到過濾後的地址列表。
    • 如果匹配條件為空,表示對所有消費方應用,如:=> host != 10.20.153.11
    • 如果過濾條件為空,表示禁止訪問,如:host = 10.20.153.10 =>

結果驗證

選擇和條件路由配置相關的應用,觸發該調用驗證。

原文首於 Dubbo 官網:https://cn.dubbo.apache.org/zh/overview/tasks/traffic-management/traffic-routing/
歡迎在 https://github.com/apache/dubbo 給 Dubbo Star。
搜索關註官方微信公眾號:Apache Dubbo,瞭解更多業界最新動態,掌握大廠面試必備 Dubbo 技能


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、vuex介紹 目標 什麼是Vuex 為什麼學習Vuex 通信方案 | 組件關係 | 數據通信 | | | | | 父子關係 | 父傳子:props ; 子傳父:$emit | | 非父子關係 | vuex (一種組件通信方案) | Vuex是什麼 概念:專門在 Vue 中實現集中式狀態(數據)管 ...
  • 23種經典設計模式共分為3種類型,分別是創建型、結構型和行為型。 今天,我們把這3種類型分成3個對應的小模塊,逐一帶你回顧一下每一種設計模式的原理、實現、設計意圖和應用場景。 還是那句話,如果你看了之後,感覺都有印象,那就說明學得還不錯;如果還能在腦子裡形成自己的知識架構,閉上眼睛都能回憶上來,... ...
  • 前言 可以通過分析PriorityBlockingQueue來瞭解JUC中的線程安全的隊列實現的一些套路,這些套路會在JUC中其他數據結構實現上反覆出現,從而可以更合理的瞭解那些實現機制背後通用的部分。 BlockingQueue A Queue that additionally supports ...
  • 互斥鎖 對於任一共用資源,同一時間保證只有一個操作者,這種方法稱為 互斥機制。 關鍵字 Mutex 表示互斥鎖類型,它的 Lock 方法用於獲取鎖,Unlock 方法用於釋放鎖。在 Lock 和 Unlock 之間的代碼,可以讀取和修改共用資源,這部分區域稱為 臨界區。 錯誤的併發操作 先來看一個錯 ...
  • 概述 Go 支持將多個結構體通過嵌套的方式,組成一個大的結構體,降低了單個結構體複雜度,同時提高了結構體之間組合的靈活性。 例子 為了省略篇幅,本小節只使用 字面量 方式初始化,new() 的初始化方式請參照 結構體 小節。 每個結構體單獨初始化,最後組裝 package main import ( ...
  • JZ51 數組中的逆序對 題目 在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P mod 1000000007 方法1:暴力 思路 演算法實現 兩個for迴圈,如果前面的 ...
  • 大家好,我是3y,一年CRUD經驗用十年的markdown程式員👨🏻‍💻常年被譽為職業八股文選手 我又又又又被吐槽了,隨之而來,我的消息推送平臺開源項目Austin又又又又更新啦,迭代自己的項目多是一件美事啊。 源碼Gitee鏈接:gitee.com/austin 01、可插拔 我的項目逐漸成 ...
  • 案例介紹 歡迎來到我的小院,我是霍大俠,恭喜你今天又要進步一點點了!我們來用Java編程實戰案例,做一個動態調色板。案例界面會出現三個滑動組塊以及對應的數值,通過移動滑塊可以改變顏色區域的顯示。通過實戰我們將學會組件的使用以及新的事件介面ChangeListener。 案例演示 界面開始顯示的是調色 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...