Top-Fragen
Zeitleiste
Chat
Kontext
Message (Entwurfsmuster)
Entwurfsmuster in der Softwarearchitektur und -entwicklung aus der Kategorie Nachrichtenerzeugung im Werk Enterprise Integration Patterns von Gregor Hohpe und Bobby Woolf Aus Wikipedia, der freien Enzyklopädie
Remove ads
Message (von englisch 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 Message (Nachricht)
Erläuterung

Zwei separate Anwendungen, die per Nachrichtenübermittlung über einen, die beiden verbindenden, Nachrichtenkanal kommunizieren, können Informationen und Daten über eine, in einen Datensatz gepackte Nachricht (Message) austauschen. Eine Nachricht besteht dabei aus zwei Teilen:
Remove ads
Grundlage weiterer Muster
Andere Entwurfsmuster wie Command Message, Document Message und Event Message verwenden das Entwurfsmuster Message um unterschiedliche Nachrichtenarten zu repräsentieren. Muss ein Datensatz aufgeteilt werden, weil er zu groß ist, können die Teile entsprechend dem Entwurfsmuster Message Sequence (Nachrichtenreihenfolge) als dann wiederum einzelne Nachrichten übermittelt werden, deren Header zusätzlich mit Informationen zur Festlegung der Reihenfolge versehen ist.
Remove ads
Implementierungsbeispiel
Beispiel einer Implementierung in Java:
public class Message implements Serializable {
private final MessageHeader header;
private final MessageBody body;
public Message (MessageHeader header, MessageBody body) {
this.header = header;
this.body = body;
}
// ...
}
Verwendungsbeispiel
Zusammenfassung
Kontext
In den folgenden Beispielen in Java wird die DSL von Apache Camel[2] verwendet, das auf den Enterprise Integration Patterns basiert.[3]
Einzelne Nachricht
package org.wikipedia.de.eip.message.construction;
import static java.lang.System.out;
import org.apache.camel.Message;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
class SingleMessageSample {
static class Data {
String info = "*** containing info ***";
} // Data
private static final DefaultCamelContext cc = new DefaultCamelContext();
public static void main( final String... args ) throws Exception {
final Data data = new Data();
cc.setName( "Single Message Sample" );
cc.addRoutes( new RouteBuilder() {
@Override
public void configure() {
from( "timer:start?repeatCount=1" ) // EIP Sender
.log( "Sending..." )
.process().message( m -> m.setBody( data ) ) // EIP Message
.process().message( m -> print( "Send", m ) )
.to( "direct:receiver" ) // EIP Receiver
.setId( "Sender" );
from( "direct:receiver" ) // EIP Receiver
.log( "Receiving..." )
.process().message( m -> print( "Receive", m ) ) // EIP Message
.setId( "Receiver" );
}
} );
cc.start();
Thread.sleep( 2000 );
cc.stop();
cc.close();
} // main()
static void print( final String endpoint, final Message m ) {
final Data data = m.getBody( Data.class ); // Data packed in Message
out.printf( "%s %s: %s%n", endpoint, m, data.info );
} // print()
} // SingleMessageSample
Ausgabe
...
11:55:00.066 [Camel (Single Message Sample) thread #0 - timer://start] INFO Sender - Sending...
Send Message: *** containing info ***
11:55:00.070 [Camel (Single Message Sample) thread #0 - timer://start] INFO Receiver - Receiving...
Receive Message: *** containing info ***
...
Multiple Nachrichten
package org.wikipedia.de.eip.message.construction;
import static java.lang.System.out;
import java.util.Vector;
import org.apache.camel.Message;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
class MultipleMessagesSample {
static class Data extends Vector<String> {
Data() {
add( "*** 1st info ***" );
add( "*** 2nd info ***" );
add( "*** 3rd info ***" );
}
} // Data
private static final DefaultCamelContext cc = new DefaultCamelContext();
public static void main( final String... args ) throws Exception {
final Data data = new Data();
cc.setName( "Multiple Messages Sample" );
cc.addRoutes( new RouteBuilder() {
@Override
public void configure() {
onException( IndexOutOfBoundsException.class )
.handled( true )
.stop(); // Übertragung wird nach dem letzten Element der Liste abgebrochen
from( "timer:start" ) // EIP Sender
// remove(i) löst eine IndexOutOfBoundsException aus wenn die Liste leer ist
.process().message( m -> m.setBody( data.remove( 0 ) ) ) // EIP Message
.log( "Sending..." )
.process().message( m -> print( "Sending", m ) )
.to( "direct:receiver" ) // EIP Receiver
.setId( "Sender" );
from( "direct:receiver" ) // EIP Receiver
.log( "Receiving..." )
.process().message( m -> print( "Receiving", m ) ) // EIP Message
.setId( "Receiver" );
}
} );
cc.start();
Thread.sleep( 4000 );
cc.stop();
cc.close();
} // main()
static void print( final String process, final Message m ) {
final String data = (String) m.getBody(); // Data packed in Message
out.printf( "%s %s: %s%n", process, m, data );
} // print()
} // MultipleMessagesSample
Ausgabe
...
11:55:00.400 [Camel (Multiple Messages Sample) thread #0 - timer://start] INFO Sender - Sending...
Sending Message: *** 1st info ***
11:55:00.403 [Camel (Multiple Messages Sample) thread #0 - timer://start] INFO Receiver - Receiving...
Receiving Message: *** 1st info ***
11:55:00.396 [Camel (Multiple Messages Sample) thread #0 - timer://start] INFO Sender - Sending...
Sending Message: *** 2nd info ***
11:55:00.396 [Camel (Multiple Messages Sample) thread #0 - timer://start] INFO Receiver - Receiving...
Receiving Message: *** 2nd info ***
11:55:00.397 [Camel (Multiple Messages Sample) thread #0 - timer://start] INFO Sender - Sending...
Sending Message: *** 3rd info ***
11:55:00.397 [Camel (Multiple Messages Sample) thread #0 - timer://start] INFO Receiver - Receiving...
Receiving Message: *** 3rd info ***
...
Remove ads
Verwandte Muster
Andere Muster aus der Kategorie Nachrichtenaufbau (Message Construction) sind Command Message, Document Message, Event Message, Request-Reply, Return Address, Correlation Identifier, Message Sequence, Message Expiration und Format Indicator.
Weitere verwandte Muster sind Canonical Data Model, Message Channel, Message Sequence.
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: Message. Messaging Patterns → Messaging Systems. In: Enterprise Integration Patterns. Gregor Hohpe, Bobby Woolf, abgerufen am 5. Dezember 2020 (englisch).
Einzelnachweise
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads