[JAVA] La coopération des messages a commencé avec l'édition Spring Boot Apache Kafka

table des matières

  1. Synopsis jusqu'à la dernière fois
  2. Objet de l'article
  3. Environnement prérequis
  4. Créer une plateforme de messagerie (édition Kafka)
  5. Créer un récepteur, une source, un processeur (édition Kafka)
  6. Contrôle de fonctionnement
  7. Résumé

Synopsis jusqu'à la dernière fois

Nous avons franchi la première étape de la conception et de la mise en œuvre d'un système axé sur les messages. Lien de message commencé avec Spring Boot

Objet de l'article

Prenons la deuxième étape.

Bien que vous puissiez facilement bénéficier de la conduite de messages RabbitMQ ne peut pas être configuré en tant que cluster Il semble que la limite supérieure d'échelle et la garantie de tolérance aux pannes au niveau du nœud soient inférieures à Apache Kafka.

Parlons également d'Apache Kafka.

Le code complété est ici. Bien que cela ne soit pas expliqué dans l'article, il est livré avec une classe de test.

Environnement prérequis

Je n'utiliserai pas Docker cette fois. D'autres sont identiques à la dernière fois, donc les informations de version sont omises.

Construire une plateforme de messagerie (édition Kafka)

Comme mentionné ci-dessus, Apache Kafka est adopté.

Depuis quickstart est publié sur le site officiel d'Apache Kafka Suivez cette procédure pour installer.

Tout d'abord, récupérez le lien HTTP depuis la page de distribution Apache Kafka.

Une structure de page dans laquelle l'URL suggérée change chaque fois que vous y accédez. Notez l'URL affichée dans "Nous suggérons ~" sauf si vous avez une raison spécifique. Coopérons avec la répartition de la charge.

Veuillez vous référer à ce qui suit. Capture d'écran lorsque meisei-u.ac.jp est suggéré. スクリーンショット 2019-12-07 22.34.10.png

Ensuite, décompressez le fichier téléchargé et déplacez-le dans un dossier inférieur.

# wget [kafka.URL de tgz]
# cd [Dossier après décompression]

Entrez la commande de démarrage. Tout d'abord, ZooKeeper.

# bin/zookeeper-server-start.sh config/zookeeper.properties

Vient ensuite Kafka lui-même.

# bin/kafka-server-start.sh config/server.properties

Vérifions un peu l'opération. Créez un sujet (destination du message) nommé test.

# bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

Affichez la liste des sujets. Confirmez que le sujet a été créé.

# bin/kafka-topics.sh --list --bootstrap-server localhost:9092
test

Avec les étapes jusqu'à présent, Kafka est prêt à traiter votre message.

Créer un récepteur, une source, un processeur (édition Kafka)

Utiliser Spring Cloud Stream comme avant Je vais faire Sink, Source et Processor ... Aucun changement dans une ligne du code d'implémentation. Le test unitaire est également la même source.

Le code précédent est ici. Le code pour cette fois est ici.

Seul pom.xml est modifié. Suppression de RabbitMQ et ajout d'Apache Kafka. Si vous comparez le pom.xml complété avec le précédent, vous pouvez le voir, donc j'omettrai les détails.

Les changements les plus importants sont: Le guide est ici.

(Omission)
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream-binder-kafka</artifactId>
		</dependency>
(Omission)

Puisqu'aucune valeur de propriété n'est définie dans l'application Le fait est que les informations de destination de connexion (localhost: 9092) à kafka et divers paramètres sont définis en fonction de la valeur par défaut.

Contrôle de fonctionnement

Exécutez le package maven clean pour chaque projet. Démarrez chaque Jar généré sous la cible comme suit.

$ 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

Dans le journal de démarrage, il est affiché que Kafka est utilisé. Voici un exemple de sortie du journal Sink.

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]
(Omission)
	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

Envoyez une requête POST à Source avec curl.

$ curl -v localhost:8080 -d '{"tweet":"Hello"}' -H 'Content-Type: application/json'

Un message est envoyé à la console qui a lancé Sink's Jar.

Received Hello processing!

Résumé

Utilisation de Spring Boot, Apache Kafka et Spring Cloud Stream J'ai appris à concevoir / implémenter la liaison de messages de microservices.

En utilisant Spring Cloud Stream La dépendance à l'infrastructure de messagerie peut être supprimée de la conception et de la mise en œuvre des applications.

Veuillez jouer avec chaque plateforme de messagerie en l'échangeant.

Les références

Spring Cloud Stream Kafka Binder Reference Guide

Apache Kafka QuickStart

Essayez Apache Kafka

Recommended Posts

La coopération des messages a commencé avec l'édition Spring Boot Apache Kafka
La coopération des messages a commencé avec Spring Boot
Démarrez avec Spring Boot
Premiers pas avec Spring Boot
Télécharger avec Spring Boot
Hello World (API REST) avec Apache Camel + Spring Boot 2
Mémo d'utilisation de Spring Security: coopération avec Spring MVC et Boot
Hello World (application console) avec Apache Camel + Spring Boot 2
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Accédez à Apache Kafka avec Micronaut
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Modifier le message de validation Spring Boot
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
gRPC sur Spring Boot avec grpc-spring-boot-starter
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot
Liaison de base de données avec doma2 (Spring boot)
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Sortie de message (Spring boot)
Obtenez des résultats de validation avec Spring Boot
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Google Cloud Platform avec Spring Boot 2.0.0
J'ai essayé GraphQL avec Spring Boot
[Java] Intégration LINE avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
Traitement lors du démarrage d'une application avec Spring Boot
Hello World avec Eclipse + Spring Boot + Maven
Envoyez des notifications régulières avec LineNotify + Spring Boot
Effectuer un test de confirmation de transaction avec Spring Boot
HTTPS avec Spring Boot et Let's Encrypt
Essayez d'utiliser Spring Boot avec VS Code
Démarrez le développement d'applications Web avec Spring Boot
Lancez l'application Nginx + Spring Boot avec docker-compose
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Traitement asynchrone avec Spring Boot en utilisant @Async
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
(IntelliJ + gradle) Hello World avec Spring Boot
Comment diviser un fichier de message Spring Boot
Utiliser le cache avec EhCashe 2.x avec Spring Boot
Test de validation de classe de formulaire avec Spring Boot