Heim  >  Artikel  >  Java  >  Was ist ein asynchroner Kommunikationsprozess mit lose gekoppelten Nachrichten?

Was ist ein asynchroner Kommunikationsprozess mit lose gekoppelten Nachrichten?

零下一度
零下一度Original
2017-06-28 09:38:001401Durchsuche

Was ist eine Nachricht?

Los gekoppelter asynchroner Kommunikationsprozess

1. Nachrichtenorientierte Middleware (MOM): Nachrichtensender wird aufgerufen der Produzent; der Ort, an dem die Nachricht gespeichert ist, wird als Ziel bezeichnet; die Komponente, die die Nachricht empfängt, wird als Verbraucher bezeichnet

2 a. Punkt-zu-Punkt: Das Ziel wird zu einer Warteschlange und die Nachricht kann nur einmal verwendet werden
b. Publish-Subscribe: Das Ziel wird zum Betreff, der Verbraucher wird als Abonnent bezeichnet und die Nachricht kann von einer beliebigen Nummer konsumiert werden

Java-Nachrichtendienst

1. JMS-API: Bietet eine einheitliche und standardmäßige Möglichkeit, über Java

auf MOM (Message Middleware) zuzugreifen 2. Nachrichtenerstellungsprozess entwickeln:

a. Verwenden Sie die Abhängigkeitsinjektion, um die Verbindungsfabrik ConnectionFactory und die Zielobjekte
abzurufen b. Verwenden Sie createConnection der Verbindungsfabrik, um die Verbindung Connection
zu öffnen c. Verwenden Sie createSession of Connection, um eine Sitzung zu erstellen und Transaktionsparameter anzugeben
d. Verwenden Sie den createProducer der Sitzung, um den Frachtwarteschlangenproduzenten zu erstellen
e. Verwenden Sie createMessage of Session, um eine Nachricht zu erstellen und
festzulegen f. Verwenden Sie den Producer zum Senden der Frachtwarteschlange, um die Nachricht
zu senden g. Ressourcen freigeben
Hinweis: Der obige Prozess basiert auf JavaEE 6. JavaEE 7 bietet einen einfacheren A-Entwicklungsprozess

3. Nachrichtenschnittstelle: Nachrichtenkopf, Nachrichtenattribute, Nachrichtentext; Implementierungsklasse: ObjectMessage überträgt Objekte, ByteMessage überträgt Bytes, MapMessage überträgt Map, StreamMessage überträgt Stream-Daten und TextMessage überträgt Text

Message-driven Bean (MDB)

1. Vorteile: Multithreading, vereinfachter Nachrichtencode

2. Designprinzipien:

a. Die MDB-Klasse muss direkt oder indirekt die Nachrichten-Listener-Schnittstelle
implementieren b. Es muss konkret und öffentlich sein, es darf keine endgültige oder abstrakte Klasse sein
c. Es muss ein POJO sein und darf keine Unterklasse einer anderen MDB sein
d. Es muss ein Konstruktor ohne Parameter vorhanden sein
e. Es kann keine endgültige Methode geben
f. Es kann keine Laufzeitausnahme ausgelöst werden, da die MDB-Instanz beendet wird, wenn sie ausgelöst wird

3. Verwenden Sie MDB, um Verbraucherprozesse zu entwickeln

a. Verwenden Sie die Annotation @MessageDriven, um die Klasse als MDB zu markieren und die MDB-Konfiguration anzugeben
b. Implementieren Sie die MessageListener-Schnittstelle und implementieren Sie die onMessage-Methode
c. Implementieren Sie die Logik in onMessage

4. @MessageDriven: Die annotierte Klasse ist MDB. Der Name gibt den Namen der von der MDB implementierten Nachrichtenschnittstelle an (die Schnittstelle kann direkt in der Klasse implementiert werden). Geben Sie die proprietären Konfigurationseigenschaften an

5. MessageLisener: Registrieren Sie MDB als Nachrichtenkonsumenten und implementieren Sie verschiedene Listener-Schnittstellen entsprechend verschiedenen Szenarien

6. ActivationConfigProperty: Konfigurieren Sie die Konfigurationsinformationen des Nachrichtensystems

a. DestinationType: informiert den Container, ob die MDB auf eine Warteschlange oder ein Thema
lauscht b. ConnectionFactoryJndiName: Gibt die Verbindungsfabrik JDNI
an, die zum Erstellen der JMS-Verbindung der MDB verwendet wird c. destianName: Geben Sie das Abhörziel
an d. AcknowledgeMode: Geben Sie den JMS-Sitzungsbestätigungsmodus an
e. subscriptionDurability: wird verwendet, um als dauerhafter Abonnent festzulegen
f. messageSelector: Nachrichten filtern

7. MDB-Lebenszyklus:

a. Erstellen Sie MDB-Instanzen und richten Sie sie ein
b. Ressourcen injizieren
c. In einem verwalteten Pool speichern
d. Wenn Sie das Ziel ermitteln, an dem die Nachricht ankommt, entfernen Sie die inaktive Bean aus dem Pool
e. Führen Sie die Nachrichten-Listener-Methode aus, d. h. die onMessage-Methode
f. Wenn die onMessage-Methode ausgeführt wird, speichern Sie die inaktive Bean zurück im Pool
g. Bohnen nach Bedarf aus dem Pool entfernen/zerstören

8. Senden Sie Nachrichten von MDB: Fügen Sie sie von JNDI in die Warteschlange ein, stellen Sie eine Verbindung zum Factory-Objekt her und verfahren Sie dann genauso wie Java-Nachrichten

9. Transaktionen verwalten: Unter normalen Umständen wird die Transaktion vor der onMessage-Methode gestartet und am Ende der Methode übermittelt. Die Transaktion kann über das Nachrichtenkontextobjekt

zurückgesetzt werden Best Practices für MDB

1. Wählen Sie, ob MDB entsprechend der Nutzung verwendet werden soll

2. Wählen Sie das Nachrichtenmodell: PTP oder Publish-Subscribe sollten während des Programmdesigns festgelegt werden, aber glücklicherweise erfordert der Wechsel zwischen den beiden nur eine Änderung der Konfiguration

3. Behalten Sie die Modularität bei: Die onMessage-Methode von MDB sollte keine Geschäftslogik verarbeiten und in die entsprechende Sitzungs-Bean eingefügt werden. MDB ist für den Aufruf der entsprechenden Sitzungs-Bean verantwortlich 4. Nutzen Sie die Filter voll aus oder teilen Sie Ziele nach Szene auf

5. Wählen Sie den Nachrichtentyp: Wählen Sie den für die Übertragung verwendeten Nachrichtentyp entsprechend dem Nutzungsszenario aus

6. Seien Sie vorsichtig bei toxischen Nachrichten: Nachrichten, die nicht verarbeitet werden können, aber zurückgesetzt werden, geraten in eine Endlosschleife des Empfangs/Zurücksetzens. Obwohl einzelne Hersteller ihre eigenen Implementierungen zur Verarbeitung toter Nachrichten haben, sollten Sie bei der Programmierung darauf achten

7. Konfigurieren Sie die MDB-Poolgröße: Konfigurieren Sie sie entsprechend dem Szenario und den Anforderungen

Referenz

EJB 3 in Aktion, Zweite Ausgabe

Das obige ist der detaillierte Inhalt vonWas ist ein asynchroner Kommunikationsprozess mit lose gekoppelten Nachrichten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn