我是新来的NSQ,我想知道是否有可能承认一个消息被消耗(就像在谷歌PubSub)。我正在使用Golang,在浏览NSQ文档(https://github.com/nsqio/nsq/blob/v1.2.1/nsqd/channel.go#L350)时,我发现了方法FinishMessage,根据它的注释,它应该是successfully discards an in-flight message。这会被视为与公认的相同吗?如果一条信息在NSQ中没有被确认,它如何确保它一旦被消耗掉,就不会再次被消耗?
谢谢
发布于 2022-04-17 12:42:51
NSQ将消息发送到使用者后自动从队列中删除。如果在设置超时后没有来自使用者的响应,则自动重新队列消息。
是的,取决于您使用的是哪个编程语言客户机,您必须发送“finish”。这是Golang https://pkg.go.dev/github.com/nsqio/go-nsq#Finish的文档
但是,由于NSQ的设计方式,如果预期的操作没有成功,您必须重新排队从您的应用程序的消息。
这是他们网站的摘录
NSQ保证消息至少会被传递一次,尽管重复消息是可能的。消费者应该期待这一点,去欺骗或执行幂等运算.此保证是作为协议的一部分强制执行的,其工作方式如下(假设客户端已成功连接并订阅了主题):
timeout)
。
您可以在这里阅读更多内容:https://nsq.io/overview/design.html
希望我的回答对你有帮助。
https://stackoverflow.com/questions/71804016
复制相似问题