résumé:
Architecture, distribuée, file d'attente de journaux, et le titre lui-même est une fonction de collecte de journaux, mais un redis est ajouté au milieu pour faire une file d'attente de messages. Pourquoi ai-je besoin d'une file d'attente de messages? Lorsque des facteurs tels que la «production» et la «consommation» apparaissent dans le système sont incohérents, une file d'attente de messages est nécessaire pour agir comme une couche abstraite pour combler les différences entre les deux parties.
Architecture, distribuée, file d'attente de journaux, et le titre lui-même est une fonction de collecte de journaux, mais un redis est ajouté au milieu pour faire une file d'attente de messages.
Pourquoi ai-je besoin d'une file d'attente de messages?
Lorsque des facteurs tels que la «production» et la «consommation» apparaissent dans le système sont incohérents, une file d'attente de messages est nécessaire pour agir comme une couche abstraite pour combler les différences entre les deux parties.
Par exemple, l'e-mail commun et l'envoi de SMS dans notre système écrit ces fonctions qui ne nécessitent pas de réponse opportune à la file d'attente, les demandes de processus de manière asynchrone et réduisent le temps de réponse.
Comment y parvenir?
Il existe de nombreux produits de middleware de file d'attente de messages JMS matures sur le marché, mais sur la base de la situation actuelle de l'architecture du projet et du déploiement, nous utilisons Redis comme file d'attente de messages.
Pourquoi utiliser Redis?
La structure des données de liste dans Redis a les caractéristiques des "files d'attente à double extrémité", et Redis a la capacité de persister des données, donc Redis est très sûr et fiable pour implémenter des files d'attente distribuées.
Il est similaire à la "file d'attente" dans JMS, sauf que la fonctionnalité et la fiabilité (transactionnalité) ne sont pas aussi strictes que JMS. Redis lui-même a des performances élevées et une conception distribuée "pratique" (répliques, paril), qui peut fournir une bonne base pour la mise en œuvre de "files d'attente distribuées".
Côté fournisseur
Le projet utilise un plugin redis tiers Spring-Data-Redis. Si vous ne savez pas comment l'utiliser, veuillez Google ou Baidu.
redis.properties:
#redis Configuration Center redis.host = 192.168.1.180redis.port = 6379redis.password = 123456redis.maxidle = 100 redis.maxactive = 300 redis.maxwait = 1000 redis.testonborrow = true redis.Timeout = 100
Configuration Redis:
<! - Redis Configuration -> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionfactory"> <propriété name = "hostname" value = "$ {redis.host}" /> <propriété name = "port" value = " value = "$ {redis.timeout}" /> <propriété name = "poolConfig" ref = "jedispoolconfig" /> <propriété name = "usepool" value = "true" /> </ bean> <bean id = "redemplate"> <propriété name = "ConnectionFactory" ref = "jedisconnectionfactory" /> </ bean> Configuration du journal sectionnel (pseudocode):
/ ** * Journal système, Classe de traitement des facettes * Créateur Xiaoqi 2012 * Temps de création 15 janvier 2018 * / @ Component @ scope @ AspectPublic class syslogaspect {@autowired private reistetemplate <String, String> Redetemplate; // Les annotations sont basées sur l'API Swagger, et vous pouvez également définir @PointCut ("@ annotation (io.swagger.annotations.apioperation)") public void logpointcut () {} @around ("logpointCut ()") Objet public autour (ProcedingJoinpoint Point) lance Throws {objet result = point.proceed ();); // Écrivez des messages de journal sur ITSTYLE_LOG Channel Redistemplate.ConvertandSend ("itstyle_log", "journaliser les données, le traiter par vous-même"); Résultat de retour; }}Côté consommateur
Configuration Redis:
<! - Redis Configuration -> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionfactory"> <propriété name = "hostname" value = "$ {redis.host}" /> <propriété name = "port" value = " Value = "$ {redis.timeout}" /> <propriété name = "poolConfig" ref = "jedispoolconfig" /> <propriété name = "usepool" value = "true" /> </ bean> <bean id = "Redemplate" p: connection-factory-ref = "jedisconnectionfactory"> <propriété name = "keyserializer"> <ean /> </ property name = "HashkeySerializer"> <Bean /> </ Property> </ Bean> <! - Écoute de la classe d'implémentation -> <bean id = "écouteur-container-factory =" StringRedisSerializer "/> <redis: écouteur-contrainer <redis: écouteur ref = "écouteur" serializer = "stringRedisserializer" méthode = "handlelog" topic = "itstyle_log" /> </ redis: écouteur-container>Interface d'écoute:
Interface publique MessageDelegateListener {public void handlelog (message sérialisable);}Implémentation d'écoute:
classe publique MessageDelegateListEnerImplt implémente MessageDelegateListERner {@Override public void handlelog (série série) {if (message == null) {System.out.println ("null"); } else {// Traitement des données de journal}}}Q&R
【Question 1】 Pourquoi utiliser Redis?
En fait, il existe déjà des explications ci-dessus, bien qu'il existe de nombreux produits très stables sur le marché, tels que Kafka, Rabbitmq et Rocketmq auxquels vous pouvez penser. Cependant, puisque le projet lui-même utilise Redis comme cache distribué, Redis est sélectionné en fonction du principe des problèmes de sauvegarde et de la faisabilité.
[Question 2] Comment stocker les données de journal?
En principe, il n'est pas recommandé de le stocker dans des bases de données relationnelles, comme MySQL. Après tout, le nombre de journaux générés est énorme, il est donc recommandé de le stocker dans des bases de données non relationnelles telles que Elasticsearch.
[Question 3] Comment la collection de journaux de section est-elle implémentée?
Le journal de la section doit introduire des packages JAR liés aux aspects de printemps, et la configuration fait que Spring adopte un proxy CGLIB.
Code source de projet open source (référence): https://gitee.com/52itstyle/spring-boot-mail
Résumer
Ce qui précède est la file d'attente de journaux distribuée Redis pour l'architecture du projet Javaweb qui vous a été présentée par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!