Для аналогичного варианта использования в моем проекте реализован следующий подход -
[1] СИСТЕМА ИСТОЧНИКА СОБЫТИЙ - вызывает -> ПРОКСИ СОБЫТИЯ -- записывает запись -> ТАБЛИЦА ЭТАП СОБЫТИЙ
[2] ТАБЛИЦА ЭТАП СОБЫТИЙ - триггеры -> ПРОЦЕДУРА БД - пишет -> QUEUE EVENT
[3] HANDLER EVENT (S) - polls -> QUEUE EVENT
Такая цепочка точек обработки помогла мне сохранить очень простую и понятную реализацию с гибкостью для самостоятельного тестирования отдельных частей системы.
Теперь, что касается вашего Вопрос 2 ;Я не понимаю вашу необходимость создавать пользователей с нуля всегда.Тем не менее, если это требуется по какой-либо причине, то при вышеупомянутом подходе вам потребуется другая процедура БД (в точке № 2), которая будет выполнять итерацию существующих строк таблицы и вызывать существующую процедуру, которая записывает в очередь событий..
Другой альтернативный подход, который можно рассмотреть здесь, - это запись в БД и параллельная обработка событий -
[1] СИСТЕМА ИСТОЧНИКА СОБЫТИЙ - трансляция по -> КАНАЛ СОБЫТИЙ
[2] ПРОЦЕДУРА БД - прослушивание -> КАНАЛ СОБЫТИЙ
[3] DB PROCEDURE - пишет в -> USER TABLE
[4] EVENT CONTROLLER - прослушивает -> КАНАЛ СОБЫТИЙ
[5] КОНТРОЛЛЕР СОБЫТИЙ - вызывает -> УПРАВЛЕНИЕ СОБЫТИЯМИ (S)
Приведенный выше подход можетпредлагает декларативный (управляемый данными) подход к регистрации обработчиков событий и предлагает преимущество в производительности обработки событий параллельно сотправка в БД;однако недостатком является то, что запись в БД и обработка события могут потребовать дополнительных усилий, если вы ожидаете транзакционного поведения.