当我重新启动我的NATS订阅者守护程序时,我意外地注意到,所有消息都被再次处理,尽管事实上它们已被处理而没有错误。
publish.go:
err := s.conn.Publish(subject, data)
subscriber.go
durable := uuid.NewV4().String()
err = s.conn.QueueSubscribe(
subject,
durable,
handler, // here I just log something
stan.StartWithLastReceived(),
stan.DurableName(durable),
)
事实上,NATS流媒体服务器每次重新启动订阅者守护程序时都会传递所有收到的消息。
我发现。这是因为持久:= uuid.NewV4()。String(),意味着每个守护进程重新启动我们获得新的唯一持久队列名称,因此它再次处理所有消息。