[JAVA] Rufen Sie Chain from Chain in Spring Integration auf

Entwicklungsumgebung

Was ist eine Kette?

In Spring Integration wird die Verarbeitung durch Verbinden der Verarbeitung mit channel entwickelt. Wenn Sie jedoch mehrere Verarbeitungen als eine Verarbeitung kombinieren möchten, ist es praktisch, chain zu verwenden.

Ich werde die spezifische Bean-Definition weglassen, aber wenn die folgende Flussdefinition gemacht wird

Vor dem Auftragen der Kette


<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
   ">

  <!--Messaging-Gateway-->
  <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" />

Mit Kette ...

Nach dem Anbringen der Kette


<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
   ">

  <!--Messaging-Gateway-->
  <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>

Kann geschrieben werden! Es hat auch den Vorteil, dass verhindert wird, dass die Flussdefinition voll von "Kanälen" wird: erröten :.

Kette von Kette aufrufen

Das Hauptthema ist also von hier. Wenn Sie eine komplizierte Anwendung entwickeln, möchten Sie eine "Kette", die eine "Kette" zusammensetzt, die mehrere Prozesse zusammenfügt. Ich überlegte, wie man "Kette" schreibt, und schrieb es intuitiv als ↓.

Ich habe versucht, eine Kette zusammenzusetzen


<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
   ">

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

  <!--Kette, die Prozess A und Prozess B zusammenfügt-->
  <int:chain input-channel="wwwChannel" output-channel="zzzChannel">
    <int:chain id="aProcess"/>
    <int:chain id="bProcess"/>
  </chain>

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

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

Als Ergebnis der Ausführung ein Laufzeitfehler ……: enttäuscht_relieved: Geben Sie einen geeigneten "Eingangskanal" für die "Kette" des Prozesses A und die "Kette" des Prozesses B an oder schreiben Sie die "Kette" des Prozesses A in die "Kette", die den Prozess A und den Prozess B kombiniert. War nicht gut

Gelöst durch Sandwiching des Gateways

Ich war eine Weile besorgt, aber als ich das Dokument noch einmal las, war die Methode geschrieben: Schweiß :.

Am Ende von 6.6.2 Konfigurieren einer Kette unter "Aufrufen einer Kette aus einer Kette heraus" unter

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.

Das war's……

Als ich das Tag "<int: gateway>" in die "Kette" schrieb, das Prozess A und Prozess B kombiniert, und den "Eingangskanal" von Prozess A und Prozess B im Attribut "Anforderungskanal" beschrieb, wurde das Verhalten erwartet. Ta! Du hast es geschafft!

Überarbeitet


<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
   ">

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

  <!--Kette, die Prozess A und Prozess B zusammenfügt-->
  <int:chain input-channel="wwwChannel" output-channel="zzzChannel">
    <int:gateway request-channel="aChannel" />
    <int:gateway request-channel="bChannel" />
  </chain>

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

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

Schließlich

Lesen Sie die Dokumentation: Freude:

Recommended Posts

Rufen Sie Chain from Chain in Spring Integration auf
Rufen Sie Spring Management Bean von Pojo
Rufen Sie Java-Methoden aus JavaScript auf, das in Java ausgeführt wird
Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
Injizieren Sie den Logger im Frühjahr
Rufen Sie Java von JRuby aus auf
1. Starten Sie Spring Framework von 1
Verwenden Sie Interceptor im Frühjahr
Microservices in Spring Cloud
Rufen Sie ein in Swift geschriebenes Programm von Processing (Java) auf.
Holen Sie sich Cookies im Frühling
Rufen Sie Ihre eigene Methode mit PreAuthorize in Spring Security auf
Implementieren Sie die Java-Schnittstelle in der JRuby-Klasse und rufen Sie sie von Java aus auf
Aufrufen und Verwenden der API in Java (Spring Boot)
Versuchen Sie Spring Boot von 0 bis 100.
Spring Boot 2 Multiprojekt mit Gradle
Fehler in der Spring-Datenbankverbindung
Wichtige Änderungen in Spring Boot 1.5
NoHttpResponseException in Spring Boot + WireMock
Schleifenschritt mit Spring Batch
[Java] Abrufen von Daten aus der Datenbank mithilfe des Singleton-Dienstes in Spring (Boot)
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe