The past several days I have been doing a fair amount of research into enterprise message patterns, event modeling, service oriented design principals, enterprise service bus implementations, and more as I investigate solutions for a problem that I am faced with in design a fairly large system that integrates with several legacy systems in the enterprise.
I have decided to build a single autonomous service to encapsulate the system I am building as it provides and aligns directly with a core business capability that needs to be delivered and less with a certain line of business. I also plan to wrap groups of these different legacy components that I need to interact with services shielding me from details of these systems.
The interaction and workflow of the solution I am designing is for the most part asynchronous and can be done through the use of queues. However, once the work in the queue is processed, I need to have the ability to notify interested parties that the work has completed and as a result there are other data as a response.
The problem models itself a lot like firing events on a background thread. The challenge here is that I am not in a single process but rather a distributed collection of systems on different platforms and architectures. Furthermore, the time from the queued request to the response could be days if not weeks.
Since there currently is no enterprise messaging/service bus in place and no orchestration platform like BizTalk, I have decided to go forward with designing and building a light-weight Eventing Service where my autonomous services can publish and subscribe to events as well as enable the facility for the publisher of the event to fire or raise the event once and have all the subscribers be notified without the publisher and subscriber having to have knowledge or binding to one another. They only have to know about the Eventing Service.
It's not the best long term solution, I know, but it should get this project off the ground and allow us to demonstrate and prove the need for a more robust and scaleable solution as we grow the enterprise to be more SOA driven as we attempt to facilitate better alignment of IT services with the business capabilities.
I am interested to hear from anyone who has done similar work in the past.