I am working on creating a new data processing system, where there are multiple steps each fulfilled by different services. For example, there is a scheduling service that kicks of something, an analysis service that does the processing, and a notification service that summarizes and emails out results. Data flows through in that orderMy main question which design would be better, should the analysis service have to know about the notification service? Or should the notification service have to know about the analysis?My initial thought is that by using a service bus, the notification service can simply be subscribed to any analysis results that get broadcast. That way if the notification service is replaced or changed there wouldn't need to be any change to the analysis service. This also means a client that wants to start an analysis and get a notification would have to call the notification service first to tell it how to handle the result it will eventually get before kicking off the actual analysis.The opposing idea is that the analysis service should simply call directly into the notification service, so the analysis service needs to know what to do to create a call into notification. This means the client would have to bundle up notification specific instructions that get passed into the analysis service for it to later look at to know what to pass to the notification call.It seems like the service bus approach of the notification service getting and processing analysis results would be better because we could also add other services in the future that then do something with a result without having to change the analysis service to call it explicitly. Can anyone provide some insight on which approach would work better to be both easier to develop, maintain, support?
Dependencies between services in pipeline
architecture;enterprise architecture;soa;messaging