NATS JetStream 2.10 的新功能 FilterSubjects

讓 Consumer 能同時監聽多個 Subjects

如果我們有特殊需求想要監聽同一個 Stream 下的多個 Subject 的情況,有鑒於過往 Consumer 只能指定一個 Subject,就必須使用 wildcard 來達成。但由於 wildcard 只能表示格式規則而不能指定條件,導致如果我們只是要取得特定數個 Subject 的訊息,還是只能建立多個 Consumer 來實現。可是,多個 Consumer 代表對於 Stream 來說是一個沈重的負擔,除了影響效能表現,管理上也較為麻煩。

在 NATS JetStream 2.10 之後,FilterSubjects 這個新功能被加入,這代表我們可以為 Consumer 指定多個 Subjects,大幅簡化了開發人員和維運人員的麻煩。對於過往被多 Consumer 搞到到崩潰的開發人員,也能大幅減少效能衝擊或是資源使用量過度的情況。

新的 SubOpt

如果你是使用 Golang,在 v1.30.0 的 NATS SDK 之後就多了一個 ConsumerFilterSubjects 的 Subscription 選項可使用:

// Use multiple subject filters.
js.Subscribe("", func(msg *nats.Msg) {
fmt.Printf("Received a message: %s\n", string(msg.Data))
}, nats.Durable("FOO"), nats.ConsumerFilterSubjects("foo", "bar"), nats.BindStream("test_stream"))

特別注意

在使用這個功能時,你可以不用代 subject 的參數,但同時你必須得使用 nats.BindStream 指定 Stream,否則你會得到 nats: subject required 的錯誤結果。

--

--