Учитывая Event-A
, Event-B
, Event-C
, которые поступают (возможно, не по порядку) в течение нескольких дней друг от друга, я хочу запустить обработку для создания производной Event-ABC
, как только я узнаю, что у меня есть все события в наборе.
События сгруппированы по userId/sessionId
В настоящее время я читаю все события из одной очереди, записываю в базу данных и обновляю метаданные, указывая, какие события были записаны. Как только метаданные содержат все события, основанные на правиле, я запускаю обработку агрегации. У этого подхода есть некоторые проблемы с производительностью из-за того, что обработчики очередей потенциально могут использовать один и тот же ключ при обработке событий, принадлежащих одной и той же группе, поэтому я ищу альтернативы.
То, что я хотел бы, - это более мелкозернистая программная маршрутизация и организация очереди событий на основе их userId/sessionId для обработки. Я думаю, что то, что я пытаюсь сделать, чем-то похоже на поиск событий.
Я искал, может ли Akka помочь с проблемой такого типа. С актером на userId/sessionId это уменьшит ненужный параллелизм и будет содержать логику триггера внутри актера. Меня беспокоят потенциально большие требования к памяти при использовании такого количества Актеров.