Event messaging is a great pattern that enables flexible and cooperative microservices development. Following this pattern, the billing process is split into many small steps that follow one after the other, based on message-based communication. This is what we call a Tiered Architecture.
The whole process is divided up into multiple chained steps. Microservices are the « worker units » in these steps. One can be triggered by a message and it can trigger another one subsequently. This is the “push” method. The other one is the “pull” method where the microservice itself is the initiator of the process. Each microservice can be configured according to the “push” or “pull” method and in so doing, you build your processing workflow.
You can therefore choose where to put validation checkpoints or bypasses. Errors are easy to deal with: retrying is as simple as a message resend.