Microservices Patterns: With Examples in Java