I accidentally noticed when I restart my NATS subscriber daemon, that all messages processed again, despite of fact they have been processed without errors.
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),
)
In fact, NATS streaming server delivers all messages ever received each time I restart subscriber daemon.