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
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.
Je n'utiliserai pas Docker cette fois. D'autres sont identiques à la dernière fois, donc les informations de version sont omises.
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é.
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.
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.
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!
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.
Spring Cloud Stream Kafka Binder Reference Guide
Recommended Posts