在过去的几天里,我一直在用 NATS 和 NATS 流服务器做一些 POC。我从 NATS 流服务器开始,为相同的 Java 客户端编写了一个 Java 客户端,并向/从 NATS 流服务器发布/订阅消息,与 NATS 服务器一起集群。NATS-streaming 非常简洁,guids
当流媒体服务器收到来自发布者的消息时提供确认。我通过注册一个AckHandler
并像这样使用它来实现这一点:
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 服务器(不是流式传输)时,我找不到任何这样的 AckHandler(或其他任何东西)可以向我提供确认guid
消息已成功发布。
NATS 流服务器有很多我正在寻找的内置功能 - 例如,message acknowledgements
(max_age
消息的 TTL)durable subscriptions
等。但它缺乏当前最新版本的集群功能。另一方面,NATS 服务器提供了集群功能,但我找不到 NATS-streaming 提供的其他功能(除非我在文档中错过了它)。
我知道有一个未解决的问题是要在单个表中列出 NATS 与 NATS 流功能,以供参考,但目前还没有完成。
当消息发布到 NATS 服务器时,NATS 服务器是否提供确认?还是确认其中一个订阅者订阅了一条消息?