Building event-driven microservices