(Funktionales) Skalieren mittels Messaging
Synchron und Asynchrone
Nicht jedes System muss zwangläufig vollständig asynchron arbeiten. Es gibt Szenarien, in denen einige Aufrufe synchron erfolgen müssen, wie im Beispiel unseres Redaktionssystems (Listing 4). Hier wird der publisherService synchron aufgerufen. Dieser Service stellt den Artikel online unter einem bestimmten URL zur Verfügung. Anschließend kann dieser Service nun eine (JMS-)Nachricht versenden, um so anderen Interessenten mitzuteilen, dass ein Artikel unter einem bestimmten URL verfügbar ist. Die Benachrichtigung anderer Services, wie beispielsweise des TwitterService, kann ja nur dann erfolgen, wenn der Artikel wirklich online verfügbar ist.
Listing 4
@Named @RequestScoped public class PublishArticle{ @Inject PublisherService publisherService; @Inject Article article; ... public String publishArticle() { publisherService.publishArticle(article); return "published"; } }
Fazit
Wie eingangs gezeigt, ermöglicht der Einsatz von Messaging, dank der damit verbundenen Möglichkeit zur Nutzung von Asynchronität, unter Umständen eine Reduktion der Latenzzeit. Zusätzlich bieten Messaging-Lösungen die Chance, den Code eines Softwaresystems modular aufzubauen und dabei gleichzeitig schlank zu halten. Aktionen werden durch das Senden von Nachrichten getriggert, auf die verschiedene Clients oder Backend-Systeme unterschiedlich reagieren können. Bei Prozessänderungen muss nicht der gesamte Code refactort werden, wie in unserem Beispiel der JSF Controller, sondern lediglich die Implementierung des entsprechenden MessageListeners. Grund genug, einmal über Messaging als alternativen Ansatz nachzudenken.
Matthias Weßendorf arbeitet für die Firma Kaazing. Dort beschäftigt er sich mit WebSocket, HTML5 und weiteren Themen rund um das „Next Generation Web“. Matthias bloggt regelmäßig auf http://matthiaswessendorf.wordpress.com (Twitter: @mwessendorf).
Hinterlasse einen Kommentar