Best Practices for Event-Driven Microservice Architecture