Как проверить, что группа потребителей уже существует в Redis?

#redis #jedis

#redis #jedis

Вопрос:

В настоящее время я ищу эффективное решение для проверки того, что группы потребителей в потоке Redis уже существуют.

У меня есть несколько модулей, которые подключаются к одному и тому же потоку и считывают из него данные. Но они могут начинаться в другом порядке, и в случае, если группы потребителей не созданы — попробуйте создать их. В случае, если первый модуль создал группу, другие получают сообщение об ошибке в соответствии с документацией.

Из документации:

Если указанная группа потребителей уже существует, команда возвращает ошибку -BUSYGROUP .

Я хотел бы избежать этой ошибки.

Я использую клиент Jedis для работы с Redis. Я знаю, что есть XINFO команда (которая может возвращать список групп), но она не работает, когда Redis был запущен в режиме кластера (что может быть одной из моих настроек).

Ответ №1:

Другого способа нет, как вы указали в своих вопросах, есть два варианта:

  1. XGROUP CREATE и перехватить ошибку, если группа уже существует.
  2. XINFO STREAM и найдите группу, но она не будет атомарной, и параллельная группа create может быть вызвана сразу после того, как вы получите информацию обратно.

Комментарии:

1. Я открыл проблему, чтобы улучшить это: github.com/redis/redis/issues/9893 . Соответствующее действие в Kafka является идемпотентным и безопасным: docs.confluent.io/platform/current/clients/consumer.html