Я пытаюсь разработать механизм воспроизведения, который позволит пользователям воспроизводить сообщения из очередей. Лучший дизайн, который я придумал для обмена, который содержит несколько очередей и нескольких потребителей, это:
Создайте службу записи, которая будет:
- Create a queue and bind all routing keys to it.
- Потребляйте все сообщения от обмена.
- Сохраните все сообщения в БД.
Запрос подписчика на повтор.
- Each subscriber creates a new exchange, queue and binds to it with same bindings as its regular queue.
- Подписчик отправляет на веб-сервер запросы на отдых, чтобы начать воспроизведение с фильтром (дата начала и т. Д.). Запрос содержит название обмена воспроизведением.
- Веб-сервер извлекает данные из БД и публикует их для конкретной биржи.
- могут быть добавлены уточнения, такие как прикрепление RequestId и его повторное отображение.
Вопросы:
1. Есть ли в этом смысл?
2. Я изобретаю колесо? Есть ли решение, присущее кролику? плагин?
3. Считается ли создание нескольких обменов хорошей практикой?
В этом решении обмен для каждой очереди создается для публикации одного и того же сообщения.
Другое решение:
1. Создайте дополнительную очередь «ReplayQueue» для каждой очереди. установить TTL (скажем, месяц).
2. Каждый раз, когда пользователь запрашивает воспроизведение, позвольте ему воспроизвести его из собственной ReplayQueue без подтверждения.
Это решение немного проблематично, потому что.
- Чтобы воспроизвести последний день, потребителям нужно будет получить все предыдущие 29 дней и отфильтровать их.
- Это решение масштабируется - очереди будут увеличиваться (в отличие от хранилища db, которое может масштабироваться).