Очередь MultiPublisher-MultiConsumer с использованием Redis - PullRequest
1 голос
/ 30 января 2020
  1. У меня есть несколько служб мониторинга MonSvc(1..N), которые обнаруживают изменения и публикуют sh эти изменения.
  2. Я несколько служб, которые работают с этими обновлениями (например, LoggerSvc & Enforcement-Svc)

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

Я использую Redis в качестве моего координатора (брокера), но я немного озадачен тем, как мне это реализовать.

Вариант 1. Каждый MonSv c# publi sh обновляет канал Redis, в то время как службы мониторинга подписываются
, такой дизайн завершается ошибкой, так как если служба Consumer выходит из строя, она может пропустить обновление, которое не может получить позже

Вариант 2: каждый MonSv c# ставит в очередь обновления в Redis List (очередь), в то время как потребители берут элементы из очереди
потребители не принимают все обновления, но каждый получает неполный список.

Вариант 3: каждый MonSv c# ставит в очередь обновления для нескольких списков повторного ввода (очереди) (очередь / потребитель), в то время как потребители принимают элементы из очередей
This работает нормально, но, кажется, плохо масштабируется (MonSv c# нужно к кто сейчас публикует в + сколько?

Как мне получить "Multi-Publisher >> Multi-Consumer Queue" с Redis (или я должен использовать более сильного брокера?)

1 Ответ

2 голосов
/ 30 января 2020

Вы ищете Redis Streams с группами потребителей, представленные в Redis 5.0. См. Здесь: https://redis.io/topics/streams-intro

Существует отличный бесплатный курс , для которого рекомендуется Redis University , рекомендуется.

С помощью Redis Streams вы можете достичь требуемой семантики доставки по крайней мере один раз.

См. Ключевые команды группы потребителей:

  • XGROUP используется для создания, уничтожения и управления группами потребителей.
  • XREADGROUP используется для чтения из потока через группу потребителей .
  • XACK - команда, позволяющая потребителю пометить ожидающее сообщение как правильно обработанное.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...