Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Стримы

Стрим JetStream сохраняет то, что публикуется в его субъекты, под порядковым номером, подтверждает каждую публикацию, а консьюмеры читают его каждый со своей позиции.

Публикация сохранена в стриме ORDERS под номером 6 и подтверждена; её читают durable-консьюмер из двух участников и эфемерный консьюмерСтрим ORDERSDurable-консьюмер billingИздательorders.created,Nats-Msg-IdPubAckстрим ORDERS,номер 6, не дубликат123456Повтор Nats-Msg-Id в пределах двух минутподтверждается снова, а хранится один разреплика 1реплика 2Эфемерныйконсьюмерудаляется,когда простаиваетКаждый консьюмер хранит свою позицию в стриме;участники durable-консьюмера делят одну
Схема текстом
  1. Стрим ORDERS: 1; 2; 3; 4; 5; 6; Повтор Nats-Msg-Id в пределах двух минут подтверждается снова, а хранится один раз
  2. Durable-консьюмер billing: реплика 1; реплика 2
  3. Издатель orders.created, Nats-Msg-Id → Стрим ORDERS: публикует
  4. 6 → PubAck стрим ORDERS, номер 6, не дубликат: PubAck
  5. Стрим ORDERS → Durable-консьюмер billing: читает
  6. Стрим ORDERS → Эфемерный консьюмер удаляется, когда простаивает: читает
  7. Каждый консьюмер хранит свою позицию в стриме; участники durable-консьюмера делят одну

Стрим захватывает сообщения, опубликованные в перечисленные в нём субъекты, здесь orders.*. Он нумерует их по порядку и хранит, пока их не удалит политика хранения: по пределам числа, размера и возраста, пока они нужны хотя бы одному консьюмеру или пока их не подтвердит консьюмер рабочей очереди.

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

Заголовки сообщения задают то, что сервер проверяет перед сохранением. Nats-Msg-Id даёт сообщению имя, и повтор внутри окна дубликатов стрима (по умолчанию две минуты) получает подтверждение как дубликат и сохраняется один раз. Nats-Expected-Stream, Nats-Expected-Last-Sequence, Nats-Expected-Last-Subject-Sequence и Nats-Expected-Last-Msg-Id заставляют сервер отклонить публикацию, если стрим не в том состоянии, которого ждёт издатель.

ruststream-nats не создаёт стримов. Стрим создают и настраивают утилитой nats или через API JetStream, а подписка находит его по имени при старте сервиса.

Эта модель взята у самого сервера NATS (стримы, заголовки, дедупликация). Как консьюмер читает стрим, показывает страница Консьюмеры.