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

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é.

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

Pré-étape

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

  1. ʻOutbound Gateway appelle la méthode qui définit ConnectionFactory`.
  2. ConnectionFactory enregistre ʻOutboundGateway dans Sender / Listener en tant qu'émetteur / récepteur (ʻOutboundGateway implémente TcpSender / TcpListener). TcpSender est l'interface pour établir une connexion depuis la fabrique de connexions pour envoyer un message, et TcpListener est l'interface pour recevoir le message reçu de la connexion.
  3. Réglez le cycle de vie de «ConnectionFactory» sur «start».

Connexion TCP (envoyer à l'hôte)

  1. Le client effectue un traitement commercial et transmet l'objet à «Message Gateway».
  2. Convertissez l'objet en Message avec MessagingTemplate et passez-le à ʻOutbound Gateway via ʻAdvisedRequestHandler.
  3. ʻOutbound Gateway appelle ConnectionFactory` pour établir une connexion.
  4. ConnectionFactory appelle buildNewConnection () ʻof TcpConnection pour établir une nouvelle connexion. Lors du partage d'une connexion (single-use = false`), vérifiez d'abord s'il existe déjà une connexion utilisable. Publiez un événement lorsqu'une nouvelle connexion est établie.
  5. ʻOutbound Gateway contient TcpConnection` dans la variable.
  6. Créer un objet AsyncRepry. C'est pour vérifier du côté client si le message reçu est associé au message envoyé, ou pour attendre le processus d'envoi jusqu'à ce qu'il soit reçu de manière asynchrone.
  7. Appelez send of TcpConnection et sérialisez le message avec Serializer et envoyez-le à l'hôte.

Appelé entre 6 et 7 si ʻInterceptor` est défini.

Connexion TCP (reçue de l'hôte)

  1. TcpConnection amène MessageMapper à mapper l'objet reçu à l'objet message.
  2. MessageMapper modifie l'en-tête et renvoie un message à TcpConnection.
  3. TcpConnection transmet un message à ʻOutbound Gateway`.
  4. ʻOutbound Gateway vérifie si le message reçu est lié à ce qui a été envoyé et le transmet à ʻAsync Repry.
  5. ʻAsyncRepry` reçoit le message et compte à rebours le verrou.
  6. Attendez que le verrou ʻAsyncRepry fasse le compte à rebours ou expire et renvoie le message à la ʻOutbound Gateway. Les processus de réception 1 à 5 sont exécutés de manière asynchrone.
  7. Si vous ne partagez pas la connexion (single-use = true), fermez la connexion. Dans ce cas, un événement est émis.
  8. ʻOutbound Gateway renvoie le résultat dans Message Gateway`.
  9. Message Gateway renvoie le résultat au client.

Si ʻInterceptor est défini, il sera appelé en 3 avant de passer le message à ʻOutbound Gateway.

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

Contexte de l'affichage

Ce sera une communication TCP utilisant Spring Integration en la matière, et dans le but d'organiser les résultats de l'enquête Je posté. Il n'y a pas beaucoup de documents japonais, donc j'espère que cela aidera ceux qui s'en inquiètent: sueur:. (Au fait, le côté serveur ne prévoit pas d'utiliser Spring Integration dans ce projet, donc je le posterai probablement) Non.

Le service utilisé pour créer le diagramme

La figure ci-dessus a été créée à l'aide d'un service appelé WebSequenceDiagrams. Vous pouvez facilement dessiner un diagramme de séquence avec un script tout en regardant l'exemple. Vous pouvez modifier la conception et la générer sous forme d'image. Si vous enregistrez votre adresse e-mail, vous pouvez enregistrer les données sur le site. Cependant, comme l'image de sortie a une faible qualité d'image et qu'un logo apparaît en bas à droite (il semble que cela puisse être résolu en chargeant), il semble qu'elle ne puisse pas être utilisée à des fins commerciales, mais il semble qu'elle puisse être utilisée pour organiser des idées.

WebSequenceDiagramsのスクリーンショット

Recommended Posts

J'ai examiné le flux de communication TCP avec Spring Integration (édition client)
J'ai examiné le flux de communication TCP avec Spring Integration (édition serveur)
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 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
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éé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 2 (édition client)
J'ai essayé de résoudre le problème de la "sélection multi-étapes" avec Ruby
J'ai essayé d'implémenter un client OAuth avec Spring Boot / Security (connexion LINE)
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
J'ai essayé le type d'entrée / sortie de Java Lambda ~ Map edition ~
J'ai essayé de vérifier le fonctionnement du serveur gRPC avec grpcurl
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