Постановка задачи:
Мы получим запросы на обработку элемента, принадлежащего к любым группам, указанным ниже -
- Grp1 -> A1, B1, C1, D1, E1
- Grp2 -> A2, B2, C2, D2, E2
- Grp3 -> A3, B3, C3, D3, E3
Сценарий 1:
Мы получаем 3 запроса на A1, B1, C1.
Поскольку все запросы относятся к одной группе, они должны обрабатываться последовательно
(текущий запрос должен быть выполнен до того, как следующий запрос может быть получен для обработки)
Сценарий 2:
Мы получаем 4 запроса на A1, A2, B2, B3
Здесь запросы A2 и B2 принадлежат к одной группе, поэтому они должны обрабатываться последовательно, как указано в сценарии 1.
и запросы A1 и B3 должны обрабатываться параллельно, поскольку они принадлежат разным группам
Таким образом, в основном запросы из разных групп должны обрабатываться параллельно.
и запросы из той же группы должны обрабатываться последовательно.
Текущий подход:
Мы планируем сделать это с Apache Kafka или activemq следующим образом -
- Создать тему
- Разделите тему на разделы, каждому разделу будет назначен один раздел
группа, поэтому количество разделов будет равно числу групп
- Каждый запрос, принадлежащий определенной группе, будет отправлен в раздел
который назначен на эту группу.
- У каждого раздела будет выделенный потребитель, который будет обрабатывать запросы
только из этого раздела.
Вопросы:
- Какой из них лучше всего подходит для требования Apache Kafka или activemq?
- Есть ли другой лучший способ решить ту же проблему?
Примечание. Данное приложение может быть распределенным микросервисным приложением с несколькими запущенными экземплярами.