Top-Fragen
Zeitleiste
Chat
Kontext
Event Message
Entwurfsmuster in der Softwarearchitektur und -entwicklung Aus Wikipedia, der freien Enzyklopädie
Remove ads
Event Message (von englisch event ‚Ereignis‘ und message ‚Nachricht‘) ist ein Entwurfsmuster in der Softwarearchitektur und -entwicklung aus der Kategorie Nachrichtenaufbau (Message Construction) im Werk Enterprise Integration Patterns von Gregor Hohpe und Bobby Woolf.[1]
- Symbol für Entwurfsmuster Event Message (Ereignisnachricht)
Erläuterung
Zusammenfassung
Kontext

Wollen mehrere Anwendungen ihre Aktionen koordinieren, können dazu Ereignisnachrichten (Event Messages) verwendet werden. Tritt in einer Anwendung ein Ereignis auf, das sie bekanntgeben möchte, erstellt sie ein Ereignis-Objekt, das im Weiteren in eine Nachricht verpackt und an einen Übertragungskanal geschickt wird. Ein Beobachter des Kanals erhält die Nachricht und verarbeitet das daraus erhaltene Ereignis. Die Übermittlung verändert die Nachricht nicht, sondern stellt lediglich sicher, dass sie beim Beobachter ankommt.
Der Unterschied zwischen einer Ereignisnachricht und einer Dokumentnachricht (Document Message) besteht im Inhalt und in der zeitkritischen Verarbeitung. Der Inhalt eines Ereignisses ist dabei weniger wichtig, viele haben überhaupt keinen. Vielmehr veranlasst das bloße Auftreten einer Ereignisnachricht einen Beobachter dazu zu reagieren. Da der Faktor Zeit bei einem Ereignis sehr wichtig ist, sollte eine entsprechende Nachricht unmittelbar nach dessen Eintreten erstellt werden. Ein Beobachter sollte das Ereignis rasch verarbeiten, solange es noch relevant ist.
Garantierte Übertragung (Guaranteed Delivery) ist bei Ereignisnachrichten üblicherweise nicht sinnvoll, da diese häufig auftreten und rasch versendet werden müssen. Nachrichtenverfall (Message Expiration) kann dazu genutzt werden, dass ein Ereignis entweder rasch verarbeitet wird oder gar nicht.
Remove ads
Verwendungsbeispiel
Zusammenfassung
Kontext
Im folgenden Beispiel in Java wird die DSL von Apache Camel[2] verwendet, das auf den Enterprise Integration Patterns basiert.[3]
package org.wikipedia.de.eip.message.construction;
import static java.lang.System.out;
import java.awt.event.TextEvent;
import org.apache.camel.Message;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
class EventMessageSample {
private static DefaultCamelContext cc = new DefaultCamelContext();
public static void main( final String... args ) throws Exception {
final TextEvent event = new TextEvent( "*** containing event ***", 42 ); // Event
cc.setName( "Event Message Sample" );
cc.addRoutes( new RouteBuilder() {
@Override
public void configure() {
from( "timer:start?repeatCount=1" ) // EIP Subject
.log( "Sending..." )
.process().message( m -> m.setBody( event ) )
.process().message( m -> print( "Sending Event", m ) )
.to( "direct:observer1" ) // EIP Observer 1
.to( "direct:observer2" ) // EIP Observer 2
.setId( "Subject" );
from( "direct:observer1" ) // EIP Observer 1
.log( "Receiving..." ).process().message( m -> print( "Receiving Event", m ) )
.setId( "Observer 1" );
from( "direct:observer2" ) // EIP Observer 2
.log( "Receiving..." ).process().message( m -> print( "Receiving Event", m ) )
.setId( "Observer 2" );
}
} );
cc.start();
Thread.sleep( 2000 );
cc.stop();
cc.close();
} // main()
static void print( final String process, final Message m ) {
final TextEvent event = (TextEvent) m.getBody(); // Event packed in Message
out.printf( "%s %s: %s%n", process, m, event.getSource() );
} // print()
} // EventMessageSample
Ausgabe
...
11:55:00.677 [Camel (Event Message Sample) thread #0 - timer://start] INFO Subject - Sending...
Sending Event Message: *** containing event ***
11:55:00.681 [Camel (Event Message Sample) thread #0 - timer://start] INFO Observer 1 - Receiving...
Receiving Event Message: *** containing event ***
11:55:00.682 [Camel (Event Message Sample) thread #0 - timer://start] INFO Observer 2 - Receiving...
Receiving Event Message: *** containing event ***
...
Remove ads
Verwandte Muster
Andere Muster aus der Kategorie Nachrichtenaufbau (Message Construction) sind Message, Command Message, Document Message, Request-Reply, Return Address, Correlation Identifier, Message Sequence, Message Expiration und Format Indicator.
Weitere verwandte Muster sind Durable Subscriber, Guaranteed Delivery, Message Channel, Point-to-Point Channel, Publish-Subscribe Channel und Remote Procedure Invocation.
Literatur
- Gregor Hohpe, Bobby Woolf: Enterprise Integration Patterns. Designing, Building and Deploying Messaging Solutions. Hrsg.: Addison-Wesley. 1. Auflage. Addison-Wesley, 2003, ISBN 978-0-321-20068-6 (englisch, 480 S.).
Weblinks
- Gregor Hohpe, Bobby Woolf: Event Message. Messaging Patterns → Message Construction. In: Enterprise Integration Patterns. Gregor Hohpe, Bobby Woolf (englisch).
Einzelnachweise
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads