Event sourcing
Building your applications using asynchronous messaging opens the door for applying some advanced architectural patterns, one of which you will learn about in this section.
When using messaging, publish/subscribe, and event collaboration, every change in the entire system's state is reflected in the form of an event that is emitted by one of the participating services. Often, each of these services has its own database, keeping its own view on the system's state (at least, as far as required) and staying up to date by continually listening to the events that are published by the other services.
However, the fact that each change in the system state is also represented by a published event presents an interesting opportunity. Imagine that someone recorded and saved each and every event that was published by anyone into an event log. In theory (and also in practice), you can use this event log to reconstruct the entire system state, without having to rely on any other kind of...