For a long time our time is discussing about propagating global events between applications that could (but don't have to) be on different servers. We have few solutions but we can't find perfect one.  Background: Suppose there are Application A, Application B and Application C where Application A can be an app accessible for a user, e.g. a shop with books and Application B is an app for creating reports in real time  and Application C is a tool for aggregating sales reports from internet book shops and stationary shops (some kind of CRM). This is not how our infrastructure looks like, this is just an example.Scenario: User buys a book from Application A which causes adding an order into user account. Application A creates an event, e.g. book:bought only once with information about purchase.  Expected: Application B listens to book:bought-type events from anywhere. When book:bought event is being dispatched, the app generates a report.Application C also listens to book:bought-type events from anywhere. When book:bought event is sent, the app creates a sale and order record.Question: How do you handle such situations? Do you have any pub-sub mechanism? How do you handle infrastructure or network problems? What if one of nodes (like Application B and Application C) is down? Is there any reliable patterns and tools to use?Many thanks for any advice!  PS. Yes, I looked for similar questions, I've found some but very often they are related with propagating events in one application. I've also found such pattern: http://www.enterpriseintegrationpatterns.com/MessageBus.html but I would to hear from you is it reliable enough and how to make sure that propagated event will be consumed later if the application is down.
Propagating events between applications
event sourcing