Sometimes exposing Notification Service to the backend is not the way to go—it could become unresponsive, have some performance issues, or just be overloaded. In such a situation, it is always good to have something that can cache messages and store them until all issues are resolved. Let's modify the previous architecture with one more service:
By introducing a Queue with readers, you can absolve the backend from handling communication with Notification Service and move the responsibility for delivering a message to them. Now Backend does not have to know how to handle undelivered messages and will not be aware of a storage ...