實現 NATS Streaming 的重新連線機制
搞定半殘的連線處理機制
NATS 是一個在雲原生(Cloud Native)生態中,新興的訊息佇列系統(Message Queue System),輕量快速是它的特色,其效能甚至遠超過其他傳統的訊息佇列系統。這讓許多人在微服務架構中,大量使用 NATS 當做訊息處理的核心機制。
若需要如 Kafka 這樣日誌型(Log-based)的機制,支援持久性訊息儲存,以實現微服務中的 Event Sourcing 和 Event Store,NATS 有另一個子專案 NATS Streaming 可以用於滿足這個需求。
雖然 NATS Streaming 是 NATS 的擴充元件,基於 NATS 的標準通訊協定。但為了實現事件持久儲存的功能和相關機制,所以也在 NATS 之上實作了自己的協定,導致我們不能直接使用 NATS 的標準原始機制去使用它,而要使用 NATS Streaming 另外提供的 Library 來進行連線和各類訊息處理。
麻煩的是,NATS Streaming 並沒有提供完整的連線狀態管理機制,導致我們沒有一個標準的重連機制作法。這樣半殘的連線處理機制,讓我們得另闢途徑解決。
以 NATS 連線處理機制取代 NATS Streaming
畢竟 NATS Streaming 底層仍然是 NATS,基本上在連線的行為,仍然還是可以通用。我們可以將連線初始化的工作,分開成 NATS 和 NATS Streaming 兩個部分。先建立 NATS 的連線,然後利用這個 NATS 連線去初始化 NATS Streaming 的連線。
然後,就可以利用 NATS 內建的重新連線機制,解決基本連線的問題。再利用其完整的觸發機制,在 NATS 重新連線完成之後,觸發再一次重新初始化 NATS Streaming 的連線。
關於這段的實作範例如下:
範例只是示意,細部 NATS Streaming 的 Client 元件管理還是要依靠開發者在實際應用中實現。