I have seen multiple videos on microservices from guys building netflix/instagram and so on, and many and data consistency between microservices, but one thing that I can't really grasp yet, is as simple as responding back to frontend.
Let's say we have frontend SPA or it could be anything else. The frontend has 2 approaches to get data (from my POV) - either it calls multiple APIS on different microservices, or calls a one that needs to orchestrate other microservices to compose a complex response.
The frontend creates an http request to one single microservice as per REST practices lets say it calls GET on service 1. To get a reply, this service 1 needs to call services 2 and 3. Since the best practice says to not use HTTP requests between the microservices but Asynchronous approach such as some message queue - this takes some time but does not block the HTTP request in any other way.
My question is - how to approach this timing incosistency? Because in this case, service 1 could easily continue its evaluation of source code, and the message from MQ could get back later than it has already replied back to frontend, at least thats what I think. Or should we block http request for some time until we get the response from MQ and check some list/cache which was set by the response from otherservice via MQ?
Or this approach is bad and it either should be that frontend calls multiple microservices' api - or the communication which needs to return something to frontend should be RESTful e.g. blocking even between microservices?
Or maybe I misunderstood and the microservices should be so self-sufficient that they don't talk to each other at all?
Thanks for helping out