重连期间缓存消息

Core NATS 客户端库会尽可能实现即发即弃的语义。你应该使用 JetStream 功能来获得更高级的服务质量,从而处理因服务器连接中断而导致的 Core NATS 消息被丢弃的情况。话虽如此,你正在使用的客户端库可能包含的一项功能是:在连接断开时能够缓冲外发的消息。

在短暂的重连期间,客户端可以允许应用程序发布消息。但由于服务器离线,这些消息会被缓存在客户端中。一旦重新连接,客户端库就会发送这些消息。当达到最大重连缓冲区容量时,客户端将无法再发布消息,并会返回错误。

请注意,虽然从应用程序的角度看消息似乎已经发送,但由于连接可能始终无法重新建立,这些消息有可能永远无法真正发出。你的应用程序应该使用 ACK 等模式,或者使用 JetStream publish 调用来确保消息投递。

对于支持此功能的客户端,你可以通过字节数、消息数或两者结合的方式来设定此缓冲区的大小。

// Set reconnect buffer size in bytes (5 MB)
nc, err := nats.Connect("demo.nats.io", nats.ReconnectBufSize(5*1024*1024))
if err != nil {
    log.Fatal(err)
}
defer nc.Close()

// Do something with the connection

如本文档所述,每个客户端库的行为可能略有不同。请查阅您正在使用的库的文档。

最后更新于