[JAVA] J'ai examiné le flux de communication TCP avec Spring Integration (édition serveur)

Dans la continuité de la dernière fois, afin d'organiser le flux de communication TCP avec Spring Integration, j'ai dessiné un diagramme de séquence côté client, bien que ce soit compliqué.

Dernière fois: J'ai vérifié le flux de communication TCP avec Spring Integration (édition client)

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

Pré-étape

On suppose que ʻautoStartUp est activé, c'est-à-dire que ʻInbound Gateway et ConnectionFactory sont démarrés au démarrage de l'application. Cela a rendu le point de départ étrange: confondu:.

  1. ʻInbound Gateway appelle la méthode qui définit ConnectionFactory`.
  2. ConnectionFactory enregistre ʻInbound Gateway dans Sender, Listener comme expéditeur / récepteur (ʻInbound Gateway implémente TcpSender, TcpListener).
  3. Réglez le cycle de vie de «ConnectionFactory» sur «start».

Connexion TCP (préparation à la réception du client)

  1. Demandez à ServerSocketFactory de générer ServerSocket en fonction du numéro de port spécifié.
  2. Maintenez le "ServerSocket" reçu et faites attendre "Socket" que la connexion soit acceptée.
  3. Exécutez TcpConnectionServerListeningEvent.
  4. Construisez un "TcpConnection" basé sur le "Socket".
  5. TcpConnection enregistre ʻInbound Gateway comme expéditeur / récepteur via ConnectionFactory`.
  6. ʻInbound Gateway contient TcpConnection`,
  7. Exécutez «TcpConnectionOpenEvent».

Connexion TCP (réponse au client)

  1. Recevez un message du client.
  2. Transmettez les messages et les canaux à MessagingTemplate, qui est un modèle pour la conversion de messages et le traitement commercial.
  3. Renvoyez le résultat du traitement à ʻInbound Gateway`.
  4. Passez le message pour répondre à TcpConnection.
  5. Passez le message à MessageMapper.
  6. MessageMapper extrait et renvoie la charge utile du message.
  7. TcpConnection sérialise la charge utile et la renvoie au client.

Remarques: Bien que omis dans la figure, il y a «Channel» et divers points de terminaison entre «MessagingTemplate» et «Inbound Gateway».

Connexion TCP (déconnexion)

  1. Émettez un ConnectionExceptionEvent si une exception se produit pendant que la connexion TCP est en cours d'établissement.
  2. Fermez Socket.
  3. TcpConnection demande à ʻInbound Gateway` de supprimer la connexion pour se déconnecter de la liste.
  4. Exécutez «ConnectionCloseEvent».
  5. Demandez au Processor, qui gère le LifeCycle, de s'arrêter à la ʻInbound Gateway`.
  6. ʻInbound Gateway demande à ConnectionFactory` de s'arrêter.
  7. ConnectionFactory ferme ServerSocket.
  8. Fermez toutes les connexions TCP qui restent.
  9. TcpConnection demande à ʻInbound Gateway` de supprimer la connexion pour se déconnecter de la liste. De plus, s'il reste des tâches, supprimez-les également.

Remarques: J'ai mentionné cela lorsqu'une exception s'est produite dans 1, mais cela fait référence au cas où Socket est fermé. Pour plus d'informations [TcpNetConneciton # run](https://github.com/spring-projects/spring-integration/blob/master/spring-integration-ip/src/main/java/org/springframework/integration/ip/ Voir tcp / connection / TcpNetConnection.java # L169).

Le service utilisé pour créer le diagramme

La figure ci-dessus a été créée à l'aide d'un service appelé WebSequenceDiagrams, en continuant de la fois précédente.

Recommended Posts

J'ai examiné le flux de communication TCP avec Spring Integration (édition serveur)
J'ai examiné le flux de communication TCP avec Spring Integration (édition client)
Comment accéder directement à Socket avec la fonction TCP de Spring Integration
Contrôlez le flux de traitement Spring Batch avec JavaConfig.
Je veux comprendre le flux des paramètres de demande de traitement Spring
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
J'ai essayé de vérifier le fonctionnement du serveur gRPC avec grpcurl
Comment vérifier avant d'envoyer un message au serveur avec Spring Integration
J'ai vérifié le nombre de taxis avec Ruby
Expérimentons le flux d'octroi de code d'autorisation avec Spring Security OAuth-Part 1: Review of OAuth 2.0
J'ai examiné le cycle de vie de l'extension de JUnit Jupiter
J'ai essayé d'utiliser la fonction Server Push de Servlet 4.0
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
À peu près le flux de développement d'applications Web avec Rails.
J'ai créé le côté serveur du jeu de cartes en ligne ①
Une histoire remplie des bases de Spring Boot (résolu)
J'ai essayé de résoudre le problème de la "sélection multi-étapes" avec Ruby
J'ai essayé le type d'entrée / sortie de Java Lambda ~ Map edition ~
Je voulais faciliter la programmation JavaFX avec Spring Framework
Voir le comportement des mises à jour d'entités avec Spring Boot + Spring Data JPA
Je veux contrôler le message d'erreur par défaut de Spring Boot
Coexistence de Flyway dans la base de données embarquée (h2) de l'environnement de développement et la base de données des versions (SQL Server) avec Spring Boot