[JAVA] Ich habe den Ablauf der TCP-Kommunikation mit Spring Integration (Client Edition) untersucht.

Um den Ablauf der TCP-Kommunikation mit Spring Integration zu organisieren, habe ich auf der Clientseite ein Sequenzdiagramm gezeichnet, das jedoch kompliziert ist.

Spring IntegrationによるTCP接続のシーケンス

Vorstufe

Es wird davon ausgegangen, dass "autoStartUp" aktiviert ist, dh "Outbound Gateway" und "ConnectionFactory" werden beim Start der Anwendung gestartet. Das machte den Ausgangspunkt seltsam: verwirrt :.

  1. Outbound Gateway ruft die Methode auf, mit der ConnectionFactory festgelegt wird.
  2. ConnectionFactory registriert OutboundGateway in Sender / Listener als Sender / Empfänger (OutboundGateway implementiert TcpSender / TcpListener). TcpSender ist die Schnittstelle zum Herstellen einer Verbindung von der Verbindungsfactory zum Senden einer Nachricht, und TcpListener ist die Schnittstelle zum Empfangen der empfangenen Nachricht von der Verbindung.
  3. Stellen Sie den Lebenszyklus von "ConnectionFactory" auf "Start".

TCP-Verbindung (an Host senden)

  1. Der Client führt die Geschäftsverarbeitung durch und übergibt das Objekt an "Message Gateway".
  2. Konvertieren Sie das Objekt mit "MessagingTemplate" in "Message" und übergeben Sie es über "AdvisedRequestHandler" an "Outbound Gateway".
  3. Outbound Gateway ruft ConnectionFactory auf, um eine Verbindung herzustellen.
  4. ConnectionFactory ruft buildNewConnection () of TcpConnection auf, um eine neue Verbindung herzustellen. Überprüfen Sie beim Freigeben einer Verbindung (single-use = false) zunächst, ob bereits eine verwendbare Verbindung besteht. Veröffentlichen Sie ein Ereignis, wenn eine neue Verbindung hergestellt wird.
  5. Outbound Gateway enthält TcpConnection in der Variablen.
  6. Erstellen Sie ein AsyncRepry-Objekt. Dies dient dazu, auf der Clientseite zu überprüfen, ob die empfangene Nachricht der gesendeten Nachricht zugeordnet ist, oder auf den Sendevorgang zu warten, bis sie asynchron empfangen wird.
  7. Rufen Sie "send" von "TcpConnection" auf und serialisieren Sie die Nachricht mit "Serializer" und senden Sie sie an den Host.

Wird zwischen 6 und 7 aufgerufen, wenn "Interceptor" definiert ist.

TCP-Verbindung (vom Host empfangen)

  1. TcpConnection bewirkt, dass MessageMapper das empfangene Objekt dem Nachrichtenobjekt zuordnet.
  2. MessageMapper bearbeitet den Header und gibt eine Nachricht an TcpConnection zurück.
  3. TcpConnection leitet eine Nachricht an Outbound Gateway weiter.
  4. Outbound Gateway prüft, ob die empfangene Nachricht an das Gesendete gebunden ist und leitet sie an AsyncRepry weiter.
  5. AsyncRepry empfängt die Nachricht und zählt den Latch herunter.
  6. Warten Sie, bis der AsyncRepry-Latch heruntergezählt ist oder eine Zeitüberschreitung aufgetreten ist, und senden Sie die Nachricht an das "Outbound Gateway" zurück. Die Empfangsprozesse 1 bis 5 werden asynchron ausgeführt.
  7. Wenn Sie die Verbindung nicht freigeben (single-use = true), schließen Sie die Verbindung. In diesem Fall wird ein Ereignis ausgegeben.
  8. Outbound Gateway gibt das Ergebnis an Message Gateway zurück.
  9. Message Gateway gibt das Ergebnis an den Client zurück.

Wenn Sie "Interceptor" definiert haben, wird dieser bei 3 aufgerufen, bevor die Nachricht an "Outbound Gateway" weitergeleitet wird.

Bemerkungen: Obwohl in der Abbildung weggelassen, gibt es zwischen "Message Gateway" und "Outbound Gateway" "Channel" und verschiedene Endpunkte.

Hintergrund zum Posting

In diesem Fall handelt es sich um eine TCP-Kommunikation unter Verwendung von Spring Integration und zum Zweck der Organisation der Untersuchungsergebnisse Ich habe gepostet. Es gibt nicht viele japanische Dokumente, daher hoffe ich, dass es denjenigen hilft, die sich darüber Sorgen machen: Schweiß :. (Übrigens plant die Serverseite nicht, Spring Integration in diesem Projekt zu verwenden, daher werde ich es wahrscheinlich veröffentlichen.) Nein.

Der Dienst, mit dem das Diagramm erstellt wurde

Die obige Abbildung wurde mit einem Dienst namens WebSequenceDiagrams erstellt. Sie können einfach ein Sequenzdiagramm mit einem Skript zeichnen, während Sie sich das Beispiel ansehen. Sie können das Design ändern und als Bild ausgeben. Wenn Sie Ihre E-Mail-Adresse registrieren, können Sie die Daten auf der Website speichern. Da das Ausgabebild jedoch eine geringe Bildqualität aufweist und unten rechts ein Logo enthalten ist (es scheint, dass es durch Aufladen gelöst werden kann), scheint es nicht für kommerzielle Zwecke verwendet werden zu können, sondern es kann zum Organisieren von Ideen verwendet werden.

WebSequenceDiagramsのスクリーンショット

Recommended Posts

Ich habe den Ablauf der TCP-Kommunikation mit Spring Integration (Client Edition) untersucht.
Ich habe den Ablauf der TCP-Kommunikation mit Spring Integration (Server Edition) untersucht.
So greifen Sie mit der TCP-Funktion von Spring Integration direkt auf Socket zu
Steuern Sie den Spring Batch-Verarbeitungsablauf mit JavaConfig.
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Ich habe die Anzahl der Taxis mit Ruby überprüft
Lassen Sie uns den Ablauf der Erteilung des Autorisierungscodes mit Spring Security OAuth-Part 1: Review of OAuth 2.0 erleben
Ich habe den Lebenszyklus der Erweiterung von JUnit Jupiter untersucht
Greifen Sie mit jdbcTemplate auf das integrierte h2db des Spring Boot zu
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Etwa der Ablauf der Entwicklung von Webanwendungen mit Rails.
Ich habe eine Funktion zum Registrieren von Bildern bei der API in Spring Framework erstellt. Teil 2 (Client Edition)
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Ich habe versucht, einen OAuth-Client mit Spring Boot / Security (LINE-Anmeldung) zu implementieren.
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Map Edition ~ ausprobiert
Ich habe versucht, den Betrieb des gRPC-Servers mit grpcurl zu überprüfen
Ich wollte die JavaFX-Programmierung mit dem Spring Framework vereinfachen
Sehen Sie sich das Verhalten von Entitätsaktualisierungen mit Spring Boot + Spring Data JPA an
Ich möchte die Standardfehlermeldung von Spring Boot steuern