Wir haben den ersten Schritt beim Entwerfen und Implementieren eines nachrichtengesteuerten Systems unternommen. Nachrichtenverknüpfung mit Spring Boot gestartet
Machen wir den zweiten Schritt.
Während Sie leicht vom Nachrichtenfahren profitieren können RabbitMQ kann nicht als Cluster konfiguriert werden Es scheint, dass die obere Skalierungsgrenze und die Gewährleistung der Fehlertoleranz auf Knotenebene Apache Kafka unterlegen sind.
Lassen Sie uns auch Apache Kafka berühren.
Der vollständige Code lautet hier. Obwohl im Artikel nicht erklärt, wird es mit einer Testklasse geliefert.
Ich werde Docker diesmal nicht verwenden. Andere sind die gleichen wie beim letzten Mal, daher werden Versionsinformationen weggelassen.
Wie oben erwähnt, wird Apache Kafka adoptiert.
Da Schnellstart auf der offiziellen Website von Apache Kafka veröffentlicht ist Befolgen Sie diese Prozedur, um zu installieren.
Rufen Sie zunächst den HTTP-Link von [Apache Kafka-Verteilungsseite] ab (https://www.apache.org/dyn/closer.cgi?path=0kafka/2.3.0/kafka_2.12-2.3.0.tgz).
Eine Seitenstruktur, in der sich die vorgeschlagene URL bei jedem Zugriff ändert. Notieren Sie sich die unter "Wir empfehlen ~" angezeigte URL, es sei denn, Sie haben einen bestimmten Grund. Lassen Sie uns mit der Lastverteilung zusammenarbeiten.
Bitte beachten Sie Folgendes. Screenshot, wenn meisei-u.ac.jp vorgeschlagen wird.
Entpacken Sie anschließend die heruntergeladene Datei und verschieben Sie sie in einen niedrigeren Ordner.
# wget [kafka.URL von tgz]
# cd [Ordner nach der Dekomprimierung]
Geben Sie den Startbefehl ein. Zunächst einmal ZooKeeper.
# bin/zookeeper-server-start.sh config/zookeeper.properties
Als nächstes kommt Kafka selbst.
# bin/kafka-server-start.sh config/server.properties
Lassen Sie uns die Operation ein wenig überprüfen. Erstellen Sie ein Thema (Nachrichtenziel) mit dem Namen test.
# bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
Zeigen Sie die Themenliste an. Bestätigen Sie, dass das Thema erstellt wurde.
# bin/kafka-topics.sh --list --bootstrap-server localhost:9092
test
Mit den bisherigen Schritten ist Kafka bereit, Ihre Nachricht zu verarbeiten.
Verwenden Sie Spring Cloud Stream wie zuvor Ich werde Waschbecken, Quelle und Prozessor machen ... Keine Änderung in einer Zeile des Implementierungscodes. Der Unit-Test ist auch die gleiche Quelle.
Der vorherige Code lautet hier. Der Code für diese Zeit lautet hier.
Nur pom.xml wird geändert. RabbitMQ wurde entfernt und Apache Kafka wurde hinzugefügt. Wenn Sie die fertige pom.xml mit der vorherigen vergleichen, können Sie sie sehen, sodass ich die Details weglassen werde.
Die wichtigsten Änderungen sind: Der Leitfaden ist hier.
(Unterlassung)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
(Unterlassung)
Da in der App kein Eigenschaftswert festgelegt ist Der Punkt ist, dass die Verbindungszielinformationen (localhost: 9092) zu kafka und verschiedene Parameter basierend auf der Standardeinstellung festgelegt werden.
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-kafka-0.0.1-SNAPSHOT.jar --server.port=8080
$ java -jar target/hello-sink-kafka-0.0.1-SNAPSHOT.jar --server.port=8082
$ java -jar target/hello-processor-kafka-0.0.1-SNAPSHOT.jar --server.port=8090
Im Startprotokoll wird angezeigt, dass Kafka verwendet wird. Das Folgende ist ein Beispiel für die Sink-Protokollausgabe.
2019-12-07 12:45:28.595 INFO 4986 --- [ main] o.s.c.s.b.k.p.KafkaTopicProvisioner : Using kafka topic for outbound: hello-sink
2019-12-07 12:45:28.600 INFO 4986 --- [ main] o.a.k.clients.admin.AdminClientConfig : AdminClientConfig values:
bootstrap.servers = [localhost:9092]
(Unterlassung)
ssl.truststore.type = JKS
2019-12-07 12:45:28.707 INFO 4986 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.3.1
2019-12-07 12:45:28.709 INFO 4986 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: 18a913733fb71c01
2019-12-07 12:45:28.710 INFO 4986 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1575722728705
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, Apache Kafka und Spring Cloud Stream Ich habe gelernt, wie man eine Microservice-Nachrichtenverknüpfung entwirft / implementiert.
Mit Spring Cloud Stream Die Abhängigkeit von der Messaging-Infrastruktur kann vom App-Design und der Implementierung entfernt werden.
Bitte spielen Sie mit jeder Messaging-Plattform, indem Sie sie austauschen.
Spring Cloud Stream Kafka Binder Reference Guide
Versuchen Sie es mit Apache Kafka
Recommended Posts