Понимание кластеризации NATS
В разделе NATS Server Clustering говорится, что:
Обратите внимание, что кластерные серверы NATS имеют ограничение пересылки в один переход. Это означает, что каждый экземпляр gnatsd будет пересылать только те сообщения, которые он получил от клиента, в непосредственно смежные экземпляры gnatsd, к которым у него есть маршруты. Сообщения, полученные по маршруту, будут распространяться только среди локальных клиентов. Поэтому для работы NATS, как это предусмотрено и описано в документации, рекомендуется использовать кластер с полной сеткой или полный граф.
Давайте предположим, что у меня есть кластер NATS из 3 узлов: A -> B -> C (->
обозначает маршрут). Пожалуйста, дайте мне знать, что произойдет с клиентами NATS в следующем сценарии:
- Сообщение отправлено на узел A
- Узел A внезапно завершает работу перед доставкой сообщения на узел B
заранее спасибо
1 ответ
В случае, который вы описали, сообщение будет удалено.
Базовый NATS обеспечивает гарантию доставки "максимум один раз", поэтому, если вы не можете терпеть потерянные сообщения, ваше приложение должно обнаружить, что сообщение никогда не поступало в место назначения, и повторно отправить сообщение. Вы можете обнаружить это по таймауту, используя шаблон запроса / ответа, или реализовать свой собственный тип исправления для потерянных сообщений.
В качестве альтернативы вы можете использовать потоковую передачу NATS, которая обеспечивает постоянство на основе журнала и располагается поверх NATS. Это гарантирует, что сообщение будет доставлено "хотя бы один раз".