[JAVA] Chaîne d'appels depuis la chaîne dans l'intégration Spring

Environnement de développement

Qu'est-ce qu'une chaîne?

Dans "Spring Integration", le traitement est développé en connectant le traitement avec "channel", mais si vous souhaitez combiner plusieurs traitements en un seul traitement, il est pratique d'utiliser "chain".

Je vais omettre la définition de bean spécifique, mais lorsque la définition de flux suivante est faite

Avant d'appliquer la chaîne


<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:int="http://www.springframework.org/schema/integration"

  xsi:schemaLocation="http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
   ">

  <!--Passerelle de messagerie-->
  <int:gateway id="gateway" default-request-channel="wwwChannel"
    service-interface="com.example.WwwGateway">

  <int:filter input-channel="wwwChannel" output-channel="xxxChannel"/>

  <int:transformer input-channel="xxxChannel" output-channel="yyyChannel" />

  <int:service-activator input-channel="yyyChannel" output-channel="zzzChannel" />

Avec chain ...

Après avoir appliqué la chaîne


<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:int="http://www.springframework.org/schema/integration"

  xsi:schemaLocation="http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
   ">

  <!--Passerelle de messagerie-->
  <int:gateway id="gateway" default-request-channel="wwwChannel"
    service-interface="com.example.WwwGateway">

  <int:chain input-channel="wwwChannel" output-channel="zzzChannel">
    <int:filter/>
    <int:transformer />
    <int:service-activator />
  </chain>

Peut être écrit! Il présente également l'avantage d'éviter que la définition de flux ne se remplisse de «channel»: blush:.

Chaîne d'appels depuis la chaîne

Donc, le sujet principal est d'ici. Si vous développez une application compliquée, vous voulez une «chaîne» qui rassemble une «chaîne» qui rassemble plusieurs processus. En pensant à la façon d'écrire «chaîne», je l'ai écrit intuitivement comme ↓.

J'ai essayé de monter une chaîne


<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:int="http://www.springframework.org/schema/integration"

  xsi:schemaLocation="http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
   ">

  <!--Passerelle de messagerie-->
  <int:gateway id="gateway" default-request-channel="wwwChannel"
    service-interface="com.example.WwwGateway">

  <!--Chaîne qui associe le processus A et le processus B-->
  <int:chain input-channel="wwwChannel" output-channel="zzzChannel">
    <int:chain id="aProcess"/>
    <int:chain id="bProcess"/>
  </chain>

  <!--Processus A-->
  <int:chain id="aProcess">
    <int:filter/>
    <int:transformer />
    <int:service-activator />
  </chain>

  <!--Processus B-->
  <int:chain id="bProcess">
    <int:filter/>
    <int:transformer />
    <int:service-activator />
  </chain>

Donc, à la suite de l'exécution, une erreur d'exécution ……: déçu_relieved: Spécifiez un «canal d'entrée» approprié pour la «chaîne» du processus A et la «chaîne» du processus B, ou écrivez la «chaîne» du processus A dans la «chaîne» qui combine le processus A et le processus B. N'était pas bon.

Résolu en prenant en sandwich la passerelle

J'étais inquiet pendant un moment, mais quand j'ai relu le document, la méthode était écrite: sueur:.

Au bas de 6.6.2 Configurer une chaîne, sous Appeler une chaîne depuis une chaîne,

Sometimes you need to make a nested call to another chain from within a chain and then come back and continue execution within the original chain. To accomplish this you can utilize a Messaging Gateway by including a element.

Je vois……

Quand j'ai écrit la balise <int: gateway> dans la chain qui combine le processus A et le processus B et décrit le canal d'entrée du processus A et du processus B dans l'attribut request-channel, le comportement était attendu. Ta! Tu l'as fait!

modifié


<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:int="http://www.springframework.org/schema/integration"

  xsi:schemaLocation="http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
   ">

  <!--Passerelle de messagerie-->
  <int:gateway id="gateway" default-request-channel="wwwChannel"
    service-interface="com.example.WwwGateway">

  <!--Chaîne qui associe le processus A et le processus B-->
  <int:chain input-channel="wwwChannel" output-channel="zzzChannel">
    <int:gateway request-channel="aChannel" />
    <int:gateway request-channel="bChannel" />
  </chain>

  <!--Processus A-->
  <int:chain id="aProcess" input-channel="aChannel">
    <int:filter/>
    <int:transformer />
    <int:service-activator />
  </chain>

  <!--Processus B-->
  <int:chain id="bProcess" input-channel="bChannel">
    <int:filter/>
    <int:transformer />
    <int:service-activator />
  </chain>

finalement

Lisez la documentation: joy:

Recommended Posts

Chaîne d'appels depuis la chaîne dans l'intégration Spring
Appeler Spring Management Bean de Pojo
Appel de méthodes Java à partir de JavaScript exécutées en Java
Appel de méthode Java depuis RPG (appel de méthode dans sa propre classe)
Inject Logger au printemps
Appeler Java depuis JRuby
1. Démarrez Spring Framework à partir de 1
Utilisez Interceptor au printemps
Microservices dans Spring Cloud
Appeler un programme écrit en Swift depuis Processing (Java)
Obtenez des cookies au printemps
Appelez votre propre méthode avec PreAuthorize dans Spring Security
Implémentez l'interface Java dans la classe JRuby et appelez-la depuis Java
Comment appeler et utiliser l'API en Java (Spring Boot)
Essayez Spring Boot de 0 à 100.
Multi-projets Spring Boot 2 avec Gradle
Erreur de connexion à la base de données Spring
Changements majeurs dans Spring Boot 1.5
NoHttpResponseException dans Spring Boot + WireMock
Étape de boucle avec Spring Batch
[Java] Obtenir des données de la base de données à l’aide du service singleton dans Spring (Boot)
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0