我有一個正在運行的本地 NATS 服務器,其中包含一個名為 EVENTS 的流和幾個主題。
在 Golang 中,我正在嘗試使用此處所述的 idleHeartBeat 選項訂閱推送消費者。
我在網上搜索了很多,找不到接收這些心跳的方法。最初,我以為我會以常規訊息的形式接收它們(正如我從這里理解的那樣理解的那樣),但是在運行下面的代碼時,我只收到我發布的訊息而沒有心跳。即使在收到我發布的所有訊息并等待幾秒鐘后,也不會再發送任何訊息,也會發生這種情況。
我應該做任何其他配置嗎?我應該聽其他訂閱或特定主題嗎?
我非常感謝任何有關如何在 Golang 中接收這些心跳訊息并以某種方式處理它們的指導。
這是我的代碼:
func main() {
url := os.Getenv("NATS_URL")
if url == "" {
url = nats.DefaultURL
}
nc, _ := nats.Connect(url)
defer nc.Drain()
js, _ := nc.JetStream()
streamName := "EVENTS"
js.AddStream(&nats.StreamConfig{
Name: streamName,
Subjects: []string{"events.>"},
})
js.Subscribe("events.*", func(msg *nats.Msg) {
fmt.Printf("monitor service subscribes from subject:%s\n", msg.Subject)
fmt.Printf("received %q from my subscription\n", msg.Subject)
msg.Ack()
}, nats.IdleHeartbeat(1*time.Second), nats.DeliverLast(), nats.ManualAck())
for {
}
}
提前致謝!
uj5u.com熱心網友回復:
在您鏈接的文章中,消費者的創建和消費者的訂閱是通過 CLI 進行的。在 CLI 中,客戶端只接收所有訊息,甚至是心跳。
NATS Go 客戶端的作業方式不同。當您呼叫該Subscribe函式時,它會創建一個使用者(因為您之前沒有定義它)并訂閱它。發布到流(和消費者)的訊息被傳遞到您的訊息處理程式,但心跳是自動處理的(檢查源代碼)。您鏈接的檔案中也對此進行了描述:
請注意,這種心跳機制全部由支持的客戶端透明處理,不需要由應用程式處理。
總而言之,CLI 客戶端顯示來自訂閱主題的所有訊息,而 NATS Go 客戶端自動處理心跳,您在訊息處理程式中看不到它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518670.html
標籤:去消息传递nats.io
上一篇:GRPC元資料未在Go中更新
