Работа с сообщениями
Система гарантирует строгий порядок сообщений в пределах одного шарда: сообщения с одинаковым ключом шардирования (sharding_key)
обрабатываются строго друг за другом.
Публикация. На каждое опубликованное сообщение система возвращает
уникальный идентификатор. Чтобы экономить сетевые ресурсы, можно отправлять сообщения пакетами. В этом случае
для всего пакета указывается единый sharding_key, а запись в шард происходит транзакционно. Однако если хотя бы одно
сообщение из пакета не проходит валидацию, то весь пакет не записывается. Система вернет ошибку с указанием идентификатора
первого проблемного сообщения. В случае успеха вы получите список идентификаторов всех сообщений в том же порядке,
в каком они отправлялись в запросе.
Чтение. Читать сообщения можно только в пределах одного шарда. Доступны три режима навигации:
- с самого первого сообщения.
- с указанного курсора.
- с последнего сообщения в очереди.
В ответе на запрос содержится поле cursor. Его можно использовать, чтобы возобновить чтение с последнего
прочитанного сообщения, например для восстановления подписки.
Если задать время ожидания polling_timeout (в миллисекундах), очередь будет ждать появления новых сообщений
и ответит сразу, как только они появятся. Это избавляет от пустых опросов, когда сообщений временно нет.
Фильтрация и консистентность. При чтении можно указать routing_key, и очередь вернет только сообщения с этим ключом.
Также поддерживается фильтрация по нескольким ключам sharding_key. Если реплика отстала от лидера и получила запрос
на чтение с курсора, которого у неё еще нет, она задержит ответ до момента получения актуальных данных
(в пределах указанного времени ожидания) — так обеспечивается консистентное чтение.
Подписка на сообщения (например, через gRPC) реализуется на уровне коннектора, а не самой очереди.