脈絡Wire Tap 很適合用來檢視通道上的訊息。但有時候我們需要的不只是檢視,而是修改或重新路由訊息

為什麼需要開關#

對元件之間流動的訊息做驗證,是很有用的除錯工具。

例如測試系統時,我們想讓訊息通過額外的驗證步驟;正式環境跳過這些步驟則能改善效能。這可以類比成程式碼中的 assert 敘述——在 debug 組態中執行,在 release 組態中不執行。

同樣地,排查問題時把訊息路由過額外的記錄或監控步驟也很有用;能把這些記錄步驟開開關關,讓我們在正常情況下把訊息吞吐量最大化。

解法#

Detour 使用一個帶兩個輸出通道的簡單情境式路由器:

  • 一個輸出通道把未修改的訊息傳給原本的目的地
  • 當 Control Bus 下令時,Detour 把訊息路由到另一個通道——那個通道把訊息送給能檢視和/或修改它的額外元件,最終那些元件再把訊息路由到同一個目的地

圖 11-3:Detour 解法示意

實作上的考量#

但這個作法假設繞道路徑上的元件能被修改,以納入受 Control Bus 控制的旁路邏輯。

用控制匯流排控制的強項#