Как в брокере сообщений "NATS" организовать "сжатие" сообщений перед публикацией и распаковку при чтении на консьюмере

У меня в golang проекте используется брокер сообщений nats. Сейчас при использовании NATS большие сообщения никак не сжимаются из-за чего producer падает с ошибкой(по умолчанию максимальный размер payload сообщения = 1 МБ). Работа с nats происходит через стримы jetstream.

Что я уже пробовал

Сначала я хотел навесить опцию --compression s2 при создании стрима (но она сжимает сообщения только ПОСЛЕ того как произошла публикация сообщения на сервер nats и сжимает уже в последний момент ПЕРЕД сохранением на диск) следовательно данный вариант нам НЕ подходит

Можно изменить в файле конфигурации nats-server.conf параметр max_payload = 10 МБ (или max_payload = 20,30,40 МБ ... и тд задать нужное максимальное значение размера сообщения) это решило проблему ЛОКАЛЬНО. Но, согласно документации 'nats', параметр max_payload можно установить не более 64 МБ, а в production среде рекомендовано не более 8 МБ. Следовательно, нам нужно решение, которое НЕ БУДЕТ затрагивать параметр max_payload.

Я вижу такие варианты решения

  1. разбивать сообщение (файл) на чанки и при получении склеивать обратно в один файл
  2. использовать minio хранилище файлов и в сообщениях отправлять только ссылку на файл
  3. сжимать файлы перед отправкой (подскажите какую библиотеку лучше использовать на голанг)

Пожалуйста, какие ваши предложения Коллеги?

Сразу скажу - не все файлы большого размера, большинство укладываются в размер до 8мб, но хочется придумать решение, которое покроет все возможные случаи


Ответы (0 шт):