1. Разделяем понятия генерации пула на уведомление и отправитель уведомлений.
2. Допустим произошло событие Х. В систему падает событие "Х произошел, вот данные(например)"
3. События из п.2 попадают в очень (Rabbit MQ, Kafka). Их слушает генератор уведомлений.
4. Генератор уведомлений получает пул пользователей для именно этого события (он может его кэшировать на короткий период, например memcached) и создаёт задания в очередь "уведомить пользователя А о событии Х"
5. Уведомлятор просто выполняет задачи из п.4
Не за что