[JAVA] Die Nachrichtenkooperation begann mit Spring Boot

Inhaltsverzeichnis

  1. Was ist eine Nachrichtenverknüpfung?
  2. Zweck des Artikels
  3. Vorausgesetzte Umgebung
  4. Erstellen Sie eine Messaging-Infrastruktur
  5. Quelle erstellen
  6. Machen Sie ein Waschbecken
  7. Erstellen Sie einen Prozessor
  8. Funktionsprüfung
  9. Zusammenfassung

Was ist eine Nachrichtenverknüpfung?

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.

Spring Cloud Stream

Zweck des Artikels

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. image.png

Wenn Sie das Operationsbild kennen möchten, lesen Sie bitte zuerst das Kapitel "Operationsprüfung" unten auf der Seite.

Voraussetzung Umgebung

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)
$ 

Erstellen Sie eine Messaging-Infrastruktur

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. image.png

Quelle erstellen

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;
	}

}

Waschbecken machen

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;
	}
}

Machen Sie einen Prozessor

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;
	}
}

Funktionsprüfung

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!

Zusammenfassung

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.

Verweise

Stream Processing with RabbitMQ

Kommunikation zwischen Microservices mit Spring Cloud Stream

Spring Cloud Stream Tutorial

Recommended Posts

Die Nachrichtenkooperation begann mit Spring Boot
Die Nachrichtenkooperation begann mit der Spring Boot Apache Kafka Edition
Beginnen Sie mit Spring Boot
Erste Schritte mit Spring Boot
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Ändern Sie die Spring Boot-Validierungsnachricht
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
Verwenden Sie die Standardauthentifizierung mit Spring Boot
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Hot Deploy mit Spring Boot-Entwicklung
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Nachricht erlöschen (Spring Boot)
Erhalten Sie Validierungsergebnisse mit Spring Boot
(Intellij) Hallo Welt mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Hallo Welt mit Eclipse + Spring Boot + Maven
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
HTTPS mit Spring Boot und Let's Encrypt
Versuchen Sie es mit Spring Boot mit VS-Code
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
(IntelliJ + gradle) Hallo Welt mit Spring Boot
So teilen Sie eine Spring Boot-Nachrichtendatei
Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Fordern Sie Spring Boot heraus
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
Konfigurieren Sie die Spring Boot-Anwendung mit dem Maven Multi-Modul
Testen Sie den Controller mit Mock MVC im Spring Boot
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
Bis zur Datenerfassung mit Spring Boot + MyBatis + PostgreSQL
Erstellen Sie mit Spring Boot eine einfache Such-App