NATS публикует / подписывает подтверждения

Я делал несколько POC с NATS и потоковыми серверами NATS в течение последних нескольких дней. Я начал с сервера потоковой передачи NATS, написав Java-клиент для него и опубликовав / подписав сообщения на / от сервера потоковой передачи NATS, кластеризованного вместе с сервером NATS. NATS-потоковая передача довольно аккуратна с предоставлением подтверждения 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 (не потоковый), я не смог найти ни одного такого AckHandlers (или что-нибудь еще), которое может дать мне подтверждение guid чтобы обозначить, что сообщение было успешно опубликовано.

Сервер потоковой передачи NATS имеет много встроенных функций, которые я ищу, например, message acknowledgements, max_age (TTL для сообщения), durable subscriptionsи т.д. Но ему не хватает возможности кластеризации с текущей последней версией, которая там есть. С другой стороны, сервер NATS обеспечивает функциональность кластеризации, но я не смог найти другие функции, которые обеспечивает потоковая передача NATS (если я не пропустил это в документации).

Я знаю, что существует открытая проблема, чтобы получить возможности потоковой трансляции NATS и NATS, изложенные в одной таблице, на которую нужно сослаться, но пока это еще не сделано.

Предоставляет ли сервер NATS подтверждения при публикации сообщения на сервере NATS? Или подтверждение сообщения, подписанного одним из подписчиков?

1 ответ

Я знаю, если это было давно, и вам может быть не интересен ответ на данный момент, но вот он:

NATS Streaming теперь поддерживает кластеризацию.

Но вернемся к вашему вопросу о ядре NATS: подтверждение от сервера не отправляется. Это природа NATS, огонь и забыть. Теперь, если ваше отправляющее приложение должно знать, что сообщение было обработано подписчиком, вы можете использовать Запрос / Ответ. То есть подписчик, получающий сообщение, может отправить сообщение обратно в тему ответа входящего сообщения. Запросчик имеет возможность установить тайм-аут, чтобы указать, как долго ждать ответа. Затем он должен принять решение относительно того, что делать, если он не получил ответ: повторно отправить? сдаваться? Обратите внимание, что подписка, возможно, обработала запрос, и ответ был пропущен (либо сбой, проблема с сетью, истечение времени ожидания запроса), поэтому вам потребуется какой-то способ обнаружения того, что запрос уже обработан. Это верно и для NATS Streaming. Существует гарантия, по крайней мере, один раз, а не самое большее один раз.

Другие вопросы по тегам