Event-driven messaging

The event-driven messaging is a design pattern, applied within the service-orientation design paradigm to enable the service consumers, which are interested in events that occur within the periphery of a service provider, to get notifications about these events as and when they occur without resorting to the traditional inefficient polling based mechanism.[1]

Rationale

The interaction between a service consumer and a service provider is normally initiated by the service consumer as it needs to respond to an event that occurs within the boundary of the service consumer itself e.g. requiring some data from an external resource (i.e. the service provider) in order to perform a calculation whose results need to be relayed back to a user interface in response to an action performed by the user. However, there are situations where the service consumer needs to wait for the occurrence of an event within the boundary of the service provider itself. Under these circumstances, the service consumer somehow needs to be informed of the event as and when it happens. One way is to program the service consumer to poll the service provider with regular intervals so that it can check if the event happened or not. This approach not only manifests inefficiency but also behavioral unpredictability. Inefficiency because the service consumer and the service provider are engaged in unproductive interactions and unreliable because it might be that the event actually happened more than once before the service consumer could poll the service consumer, thereby missing the previous events and their related data. Apart from these problems, such a technique also introduces latency as the interval with which the service consumer performs the polling is fixed and, therefore, it would only fetch the event data at that time and not when the event actually occurred. This whole scenario deteriorates even further if multiple service consumers are dependent on a particular service provider.

In order to tackle this problem, the event-driven messaging design pattern suggests a publisher-subscriber communication mechanism that ensures timely notification of event related data to the service consumer,[2] thereby eliminating the inefficiencies linked with the traditional polling based communication mechanism.

Usage

Diagram A
To find out if a particular event has occurred or not, the service consumer polls the service provider with regular intervals, which results in inefficient service interactions.
Diagram B
The event manager automatically notifies all the interested service consumers about the occurrence of a particular event the moment it actually happens.

The application of the event-driven messaging design pattern requires an event manager with whom the service provider registers its events. The service consumers then register their interest in few or all of the advertised events. Upon the occurrence of an event, the service provider informs the event manager that then notifies all of the registered service consumers instantly.[3] This communication mechanism shares its roots with the Observer pattern applied traditionally within the object-oriented world.[3] This design pattern also borrows some concepts from the Event-Driven Architecture as the fundamental rationale behind this design pattern is responding to events.[4]

The actual implementation of such a publisher–subscriber-based communication mechanism requires architectural extensions in order to provide such a complex message tracking and forwarding mechanism. A mature ESB product should normally be able to provide such functionality. The application of this pattern helps to further decouple[5] the service consumers from the service providers and increases the overall reliability of a service composition.

Considerations

The application of this pattern is dependent upon the existence of underlying platform extensions, which if not already present, would incur extra cost and therefore would impact the IT budget. It should also be noted that the publisher-subscriber model is based on asynchronous messaging, so the transmission of a message from the event manager can take place at any time, which could mean that if the event manager broadcasts an event notification message then it's not necessary that the service consumer would be online to receive it. So the application of this design pattern does not solve the unavailability problems. However, this could be addressed by further applying the asynchronous queuing[6] and the reliable messaging[7] design patterns that guarantee that a transmitted message is always received by the intended receiver along with acknowledgment messages.

The introduction of architectural extensions would affect the current service inventory architecture and the way service compositions are designed, therefore, also affecting the service composition architectures.

References

  1. Wajid Khattak, Vijay Narayanan.Event-Driven Messaging[Online].Date accessed: 27 April 2010.
  2. Mauro. et al. Service Oriented Device Integration – An Analysis of SOA Design Patterns. Archived 1 February 2011 at WebCite [Online], pp.1–10, 2010 43rd Hawaii International Conference on System Sciences, 2010. Date accessed: 4 April 2010.
  3. Mauro et al. Standardized Device Services – A Design Pattern for Service Oriented Integration of Medical Devices [Online].Date accessed: 4 April 2010.
  4. Thomas Erl.Introducing SOA Design Patterns[Online].Date accessed: 4 April 2010.
  5. Coupling Types
  6. Asynchronous Queuing
  7. Reliable Messaging
  • Erl et al.,(2009).SOA Design Patterns. Prentice Hall. ISBN 0-13-613516-1.
  • Michael Stal.Using Architectural Patterns and Blueprints for Service-Oriented Architecture[Online].Date accessed: 1 May 2010.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.