I have an architecture based on several Self-Contained Systems (Microservices, if you want), each one of them owning a given set of data.
We would like to implement a reporting database (with near-realtime updates) by integrating all of the systems to let them "project" their data into the centralized reporting data storage.
I would like to give to each system the responsibility to fill their piece of the reporting data model, in a loosely coupled manner. Indeed, I would like to avoid implementing a centralized "reporting system" which maybe can listen to MQ messages coming from the various systems and fetch data trough API from them (acting as an orchestrator basically).
I would like to do the opposite, meaning... the various systems should have the possibility to plug their "data reporting projector" component into this reporting system.
This way I could avoid dependencies between the various systems that want to project data and the reporting system itself (and vice-versa) and keep the logic for the reporting projection in the owning system itself.
Do you know any already existing tools I could use in order to implement this kind of integration layer for reporting purposes?
Can you suggest some architectural patterns or approaches that can be followed in this case?
The main technology we use for the backend is .NET.
Thanks.