Die Nachrichtenverknüpfung erfolgt zwischen Anwendungsprogrammen Durch den Austausch von "Nachrichten" wie Daten und die Verarbeitung von Anfragen Ein Mechanismus zum asynchronen Verknüpfen mehrerer Anwendungen.
Im Microservice-Design Indem Sie die Nachricht vorübergehend halten und Middleware einführen, die diese Zustellung vermittelt Die Richtlinie besteht darin, jeden Dienst spärlich zu halten und die Skalierbarkeit zu verbessern.
Jeder liebt Spring Framework und Spring Boot Erzielen Sie eine einfache Entwicklung von Diensten, die die Nachrichtenverknüpfung verarbeiten Das Spring Cloud Stream-Projekt macht auf sich aufmerksam.
Lassen Sie uns die Nachrichtenverknüpfung mit Spring Cloud Stream berühren.
Der vollständige Code lautet hier. Obwohl im Artikel nicht erklärt, wird es mit einer Testklasse geliefert.
Das Konfigurationsdiagramm ist unten. Wenn Sie beim Lesen nicht verstehen, schauen Sie bitte zurück.
Wenn Sie das Operationsbild kennen möchten, lesen Sie bitte zuerst das Kapitel "Operationsprüfung" unten auf der Seite.
Die Umgebung des Autors ist wie folgt.
Spring Tool Suite 3
Version: 3.9.9.RELEASE
Build Id: 201906181741
Platform: Eclipse 2019-06 (4.12.0)
$ docker version
Client: Docker Engine - Community
Version: 19.03.2
API version: 1.40
Go version: go1.12.8
(Unterlassung)
Server: Docker Engine - Community
Engine:
Version: 19.03.2
API version: 1.40 (minimum version 1.12)
Go version: go1.12.8
(Unterlassung)
containerd:
Version: v1.2.6
(Unterlassung)
runc:
Version: 1.0.0-rc8
(Unterlassung)
docker-init:
Version: 0.18.0
(Unterlassung)
$
$ java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
$
Rabbit MQ wird übernommen, weil es leicht einzuführen ist.
Ziehen Sie das Image aus DockerHub und starten Sie den Container mit run. Das Handbuch für den Rabbit MQ-Container finden Sie hier.
$ docker pull rabbitmq
//Befehl starten
$ docker run -p 15672:15672 -p 5672:5672 rabbitmq:3-management
Nach dem Booten können Sie auf die Admin-Konsole zugreifen. Die URL ist unten. http://localhost:15672/
Die ID und PW sind standardmäßig Gast: Gast.
Spring Cloud Stream empfängt Daten von außerhalb des Dienstes, z. B. die REST-API Der Dienst, der (OUTPUT) mit der Messaging-Plattform verbindet, heißt Source.
Der vollständige Code lautet hier.
Definieren Sie zunächst den Namen der Zielwarteschlange der Messaging-Infrastruktur in application.properties.
spring.cloud.stream.bindings.output.destination=hello-processor
Dann mit der Annotation @EnableBinding Ordnen Sie die POJO-Klasse der Zielwarteschlange der Messaging-Plattform zu.
Darüber hinaus DI das Quellobjekt Rufen Sie die Methode Source.output.send () auf, um eine Nachricht zu senden.
(Weggelassen)
@EnableBinding(Source.class)
public class HelloSourceApplication {
private final Source source;
public HelloSourceApplication(Source source) {
this.source=source;
}
(Weggelassen)
@PostMapping
public void tweet(@RequestBody Tweet tweet) {
source.output().send(MessageBuilder.withPayload(tweet).build());
}
public static class Tweet {
public String tweet;
}
}
Im Gegensatz zu Source empfängt es INPUT von der Messaging-Plattform Ein Dienst, der Daten mit dem Backend verknüpft Sink im Frühjahr Cloud Stream genannt.
Der vollständige Code lautet hier.
Definieren Sie zunächst den Namen der Zielwarteschlange der Messaging-Infrastruktur in application.properties.
spring.cloud.stream.bindings.input.destination=hello-sink
Dann mit der Annotation @EnableBinding Ordnen Sie die POJO-Klasse der Zielwarteschlange der Messaging-Plattform zu. Auch mit der Annotation @StreamListener Verknüpfen Sie die von der Warteschlange empfangene Nachricht direkt mit dem DTO.
Dieses Mal wird das empfangene DTO an die Standardausgabe ausgegeben und der Prozess endet.
(Weggelassen)
@EnableBinding(Sink.class)
public class HelloSinkApplication {
(Weggelassen)
@StreamListener(Sink.INPUT)
public void print(Tweet tweet) {
System.out.println("Received " + tweet.tweet);
}
public static class Tweet {
public String tweet;
}
}
EINGANG von der Messaging-Plattform erhalten Ein Dienst, der eine Verbindung (OUTPUT) mit einer Messaging-Plattform herstellt, wird als Prozessor bezeichnet.
Klicken Sie hier für den vollständigen Code (https://gitlab.com/kyosuke_yamagata/hello-messaging/blob/master/hello-processor/src/main/java/com/example/helloprocessor/HelloProcessorApplication.java)
Definieren Sie zunächst den Namen der Zielwarteschlange der Messaging-Infrastruktur in application.properties. In diesem Beispiel wird der Name der Zielwarteschlange, den der Sink-Dienst abonniert, in OUTPUT definiert. Außerdem wird als EINGABE der Name der Zielwarteschlange definiert, an den Source eine Nachricht sendet.
spring.cloud.stream.bindings.output.destination=hello-sink
spring.cloud.stream.bindings.input.destination=hello-processor
Dann mit der Annotation @EnableBinding Ordnen Sie die POJO-Klasse der Zielwarteschlange der Messaging-Plattform zu.
Darüber hinaus wird die empfangene Nachricht mithilfe der Annotation @StreamListener mit dem DTO verknüpft. Darüber hinaus mit der Annotation @SendTo Die Zielwarteschlange zum Senden der Nachricht und der Nachrichtentext sind mit dem DTO verknüpft, bei dem es sich um den Methodenrückgabewert handelt.
Als Ergebnis, wenn Sie die Nachricht erhalten Der Wert wird verarbeitet ("Verarbeitung!" Wird danach hinzugefügt) und die Nachricht wird gesendet.
(Weggelassen)
@EnableBinding(Processor.class)
public class HelloProcessorApplication {
(Weggelassen)
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
public Tweet transform(Tweet tweet) {
tweet.tweet += " processing!";
return tweet;
}
public static class Tweet {
public String tweet;
}
}
Führen Sie für jedes Projekt ein Maven Clean-Paket aus. Starten Sie jedes unter dem Ziel erzeugte Glas wie folgt.
$ java -jar target/hello-source-0.0.1-SNAPSHOT.jar --server.port=8080
$ java -jar target/hello-sink-0.0.1-SNAPSHOT.jar --server.port=8082
$ java -jar target/hello-processor-0.0.1-SNAPSHOT.jar --server.port=8090
Senden Sie eine POST-Anfrage mit Curl an Source.
$ curl -v localhost:8080 -d '{"tweet":"Hello"}' -H 'Content-Type: application/json'
Eine Nachricht wird an die Konsole ausgegeben, die Sink's Jar gestartet hat.
Received Hello processing!
Verwenden von Spring Boot, Rabbit MQ und Spring Cloud Stream Ich habe gelernt, wie man eine Microservice-Nachrichtenverknüpfung entwirft / implementiert.
Bitte starten Sie und spielen Sie mit jedem Dienst.
Stream Processing with RabbitMQ
Kommunikation zwischen Microservices mit Spring Cloud Stream
Recommended Posts