首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NATS发布/订阅确认

NATS发布/订阅确认
EN

Stack Overflow用户
提问于 2018-01-05 19:11:21
回答 1查看 1.4K关注 0票数 1

在过去的几天里,我一直在用NATS和NATS流媒体服务器做一些POC。我从NATS-streaming服务器开始,为它编写了一个Java客户端,并向NATS-streaming服务器发布/订阅消息,与NATS服务器一起集群。neat streaming非常简洁,当流服务器接收到来自发布者的消息时,它提供确认guids。我通过注册AckHandler并像这样使用它来实现这一点:

代码语言:javascript
复制
guid[0] = sc.publish("produceQueue", payload, new AckHandler() {
                @Override
                public void onAck(String nuid, Exception ex) {
                    LOGGER.debug("Received ACK for guid: {}", nuid);
                }

                System.out.flush();
                latch.countDown();
        }
    });

然而,当我开始查看NATS服务器(而不是流)时,我找不到任何这样的AckHandlers (或其他任何东西),它们可以为我提供一个确认guid来表示消息已经成功发布。

NATS流服务器有很多我正在寻找的内置功能-例如,message acknowledgementsmax_age (消息的TTL),durable subscriptions等,但它缺乏当前最新版本的集群功能。另一方面,NATS服务器提供集群功能,但我找不到NATS-streaming提供的其他特性(除非我在文档中遗漏了它)。

我知道有一个open issue可以让NATS与NATS流功能在一个单独的表格中列出供参考,但到目前为止还没有完成。

当消息发布到NATS服务器时,NATS服务器是否提供确认?或者由订阅者之一订阅的消息的确认?

EN

回答 1

Stack Overflow用户

发布于 2018-10-01 23:08:20

我知道已经有很长一段时间了,你现在可能对答案不感兴趣,但它是这样的:

NATS流现在支持群集。

但是回到你关于核心NATS的问题:没有从服务器发回确认。这就是NATS的本质,一发即忘。现在,如果您的发送应用程序需要知道消息已被订阅者处理,您可以使用请求/回复。也就是说,获得消息的订阅者可以将消息发送回传入消息的回复主题。请求者可以选择设置超时来指示等待响应的时间。然后,它必须做出决定,如果没有得到答复,该怎么办:重新发送?放弃?请注意,订阅可能已经处理了请求,而应答丢失(可能是崩溃、网络问题、请求或只是超时),因此您需要某种方式来检测请求是否已经处理。NATS流媒体也是如此。有一个至少一次的保证,而不是至多一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48112393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档