Refactor MessageQueue to infrastructure
Implement event dispatch