We now have a working application that seems to work reasonably well. Each microservice is an independent autonomous unit that does one thing and does it well. Nothing is shared across microservices, and they seem to remain independent.
Our microservices are all non-blocking and asynchronous in their internal implementation and communication with external services. We have adequately handled implicitly-blocking database calls by letting Slick take care of all the pain, and in turn, providing us with an asynchronous API.
So, we have fundamentally executed everything we learned up until now in this book, in this chapter. However, are we still good enough?
Service locator: If the rank-app microservice needs to make an HTTP call to so-app, it needs to have the URL of the so-app microservice. Currently, this URL is provided by the config file to rank-app. This is a fragile...