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

Um den Ablauf der TCP-Kommunikation mit Spring Integration zu organisieren, habe ich vom letzten Mal an ein Sequenzdiagramm auf der Clientseite gezeichnet, obwohl es kompliziert ist.

Letztes Mal: Ich habe den Ablauf der TCP-Kommunikation mit Spring Integration (Client Edition) überprüft

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

Vorstufe

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

  1. Inbound Gateway ruft die Methode auf, die ConnectionFactory setzt.
  2. "ConnectionFactory" registriert "InboundGateway" in "Sender", "Listener" als Absender / Empfänger ("InboundGateway" implementiert "TcpSender", "TcpListener").
  3. Stellen Sie den Lebenszyklus von "ConnectionFactory" auf "Start".

TCP-Verbindung (Vorbereitung für den Empfang vom Client)

  1. Bitten Sie "ServerSocketFactory", "ServerSocket" basierend auf der angegebenen Portnummer zu generieren.
  2. Halten Sie den empfangenen "ServerSocket" gedrückt und lassen Sie den "Socket" warten, bis die Verbindung akzeptiert wird.
  3. Geben Sie "TcpConnectionServerListeningEvent" aus.
  4. Erstellen Sie eine TcpConnection basierend auf dem Socket.
  5. TcpConnection registriert Inbound Gateway als Sender / Empfänger über ConnectionFactory.
  6. Inbound Gateway enthält TcpConnection,
  7. Geben Sie "TcpConnectionOpenEvent" aus.

TCP-Verbindung (Antwort an Client)

  1. Empfangen Sie eine Nachricht vom Client.
  2. Übergeben Sie Nachrichten und Kanäle an "MessagingTemplate", eine Vorlage für die Nachrichtenkonvertierung und Geschäftsverarbeitung.
  3. Geben Sie das Verarbeitungsergebnis an "Inbound Gateway" zurück.
  4. Übergeben Sie die Nachricht, um auf "TcpConnection" zu antworten.
  5. Übergeben Sie die Nachricht an "MessageMapper".
  6. MessageMapper extrahiert die Nachrichtennutzdaten und gibt sie zurück.
  7. TcpConnection serialisiert die Nutzdaten und sendet sie an den Client zurück.

Bemerkungen: Obwohl in der Abbildung weggelassen, gibt es zwischen "Messaging Template" und "Inbound Gateway" "Channel" und verschiedene Endpunkte.

TCP-Verbindung (trennen)

  1. Geben Sie ein "ConnectionExceptionEvent" aus, wenn beim Aufbau der TCP-Verbindung eine Ausnahme auftritt.
  2. Schließen Sie die Buchse.
  3. TcpConnection fordert Inbound Gateway auf, die zu trennende Verbindung aus der Liste zu entfernen.
  4. Geben Sie "ConnectionCloseEvent" aus.
  5. Bitten Sie den "Prozessor", der den "Lebenszyklus" verwaltet, am "Inbound Gateway" anzuhalten.
  6. Inbound Gateway fordert Connection Factory auf zu stoppen.
  7. ConnectionFactory schließt ServerSocket.
  8. Schließen Sie alle noch verbleibenden TCP-Verbindungen.
  9. TcpConnection fordert Inbound Gateway auf, die Verbindung, die getrennt werden soll, aus der Liste zu entfernen. Wenn noch Aufgaben vorhanden sind, löschen Sie diese ebenfalls.

Bemerkungen: Ich erwähnte, dass 1 eine Ausnahme verursacht hat, aber es bezieht sich auf den Fall, in dem "Socket" geschlossen ist. Weitere Informationen TcpNetConneciton # run Siehe tcp / connection / TcpNetConnection.java # L169).

Der Dienst, mit dem das Diagramm erstellt wurde

Die obige Abbildung wurde mit einem Dienst namens WebSequenceDiagrams erstellt, der aus der vorherigen Zeit fortgesetzt wurde.

Recommended Posts

Ich habe den Ablauf der TCP-Kommunikation mit Spring Integration (Server Edition) untersucht.
Ich habe den Ablauf der TCP-Kommunikation mit Spring Integration (Client 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 versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Ich habe versucht, den Betrieb des gRPC-Servers mit grpcurl zu überprüfen
So überprüfen Sie, bevor Sie mit Spring Integration eine Nachricht an den Server senden
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
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
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 die Serverseite des Online-Kartenspiels gemacht made
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Map Edition ~ ausprobiert
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
Koexistenz von Flyway in der eingebetteten Datenbank (h2) der Entwicklungsumgebung und der Release-Datenbank (SQL Server) mit Spring Boot