Zusammenfassung:
Architektur, verteilt, Protokollwarteschlange und der Titel selbst ist eine Log -Sammlungsfunktion, aber in der Mitte wird ein Redis hinzugefügt, um eine Nachrichtenwarteschlange zu erstellen. Warum brauche ich eine Nachrichtenwarteschlange? Wenn Faktoren wie "Produktion" und "Verbrauch" im System inkonsistent sind, ist eine Meldungswarteschlange erforderlich, um als abstrakte Schicht zu fungieren, um die Unterschiede zwischen den beiden Parteien zu schließen.
Architektur, verteilt, Protokollwarteschlange und der Titel selbst ist eine Log -Sammlungsfunktion, aber in der Mitte wird ein Redis hinzugefügt, um eine Nachrichtenwarteschlange zu erstellen.
Warum brauche ich eine Nachrichtenwarteschlange?
Wenn Faktoren wie "Produktion" und "Verbrauch" im System inkonsistent sind, ist eine Meldungswarteschlange erforderlich, um als abstrakte Schicht zu fungieren, um die Unterschiede zwischen den beiden Parteien zu schließen.
Beispielsweise schreibt die gemeinsame E -Mail und SMS, die in unserem System gesendet werden, diese Funktionen, für die keine rechtzeitige Antwort auf die Warteschlange erforderlich ist, die Prozessanforderungen asynchron und die Reaktionszeit verkürzen.
Wie kann man es erreichen?
Es gibt viele ausgereifte JMS Message Queue Middleware -Produkte auf dem Markt, aber basierend auf der aktuellen Projektarchitektur und Bereitstellungssituation verwenden wir Redis als Nachrichtenwarteschlange.
Warum Redis verwenden?
Die Listendatenstruktur in Redis hat die Eigenschaften von "doppelten Warteschlangen", und REDIS hat die Möglichkeit, Daten zu bestehen, sodass Redis sehr sicher und zuverlässig für die Implementierung verteilter Warteschlangen ist.
Es ähnelt der "Warteschlange" in JMS, außer dass die Funktionalität und Zuverlässigkeit (Transaktionalität) nicht so streng wie JMS sind. Redis selbst verfügt über eine hohe Leistung und "bequemes" verteiltes Design (Replicas, Sharding), die eine gute Grundlage für die Implementierung von "verteilten Warteschlangen" bieten können.
Anbieterseite
Das Projekt verwendet einen Drittanbieter Redis-Plugin-Spring-Data-Redis. Wenn Sie nicht sicher sind, wie Sie es verwenden sollen, bitte Google oder 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 = echte Redis.Timeout = 100000
Redis -Konfiguration:
<!-Redis-Konfiguration-> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionFactory"> <Property name = "hostname" value = "$ {redis.host}" /> <Eigenschaft name = "port" value = "$ {{redis.port}}}" /> <proby = "password" name = "timeout" value = "$ {redis.timeout}" /> <Eigenschaft name = "poolconfig" ref = "jedispoolconfig" /> <Property name = "usepool" value = "true" /> < /bean> <bean id = "redisteme"> <property name = "connectionfactory" ref = " Abschnittsprotokonfiguration (Pseudocode):
/*** Systemprotokoll, Facettenverarbeitungsklasse* Ersteller xiaoqi 2012* Erstellungszeit 15. Januar 2018*/@component@scope@Aspektpublic Class sysLogaspep {@autowired private redistemplate <string, string> redistemplate; // Anmerkungen basieren auf der Swagger -API, und Sie können auch @pointcut (" @Annotation (io.swagger.Annotations.apioperation) definieren. // Schreiben Sie Protokollnachrichten in Itsstyle_log -Kanal redistemplate.convertandSend ("itStyle_log", "Daten protokollieren, es selbst verarbeiten"); Rückgabeergebnis; }}Verbraucherseite
Redis -Konfiguration:
<!-Redis-Konfiguration-> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionFactory"> <Property name = "hostname" value = "$ {redis.host}" /> <Eigenschaft name = "port" value = "$ {{redis.port}}}" /> <proby = "password" name = "timeout" value = "$ {redis.timeout}" /> <Eigenschaft name = "poolconfig" ref = "jedispoolconfig" /> <Property name = "usepool" value = "true" /> < /bean> <bean id = "redistemplate" p: connection-factory-ref = "jediscontefactory"> <banialth /> <baniNial "> <banteal"> <banteal "> <banteal"> <banteal "> <banteal"> <banteal "> <banteal"; </Property> <Eigentum name = " Ich möchte-> <Redis: Listener Ref = "Listener" serializer = "StringRedisserializer" methode = "Handlelog" Topie = "itStyle_log"/> </redis: louser-container>Hörschnittstelle:
öffentliche Schnittstelle MessagedElegatelistener {public void Handlelog (serialisierbare Nachricht);}Anhörungsimplementierung:
öffentliche Klasse MessagedElegatelistenerimpl implementiert MessagedElegatelistener {@Override public void Handlelog (serialisierbare Nachricht) {if (message == null) {System.out.println ("null"); } else {// Prozessprotokolldaten}}}Fragen und a
【Frage 1】 Warum Redis verwenden?
Tatsächlich gibt es oben bereits Erklärungen, obwohl es viele sehr stabile Produkte auf dem Markt gibt, wie Kafka, Rabbitmq und RocketMQ, an die Sie denken. Da das Projekt selbst Redis als verteiltes Cache verwendet, wird Redis basierend auf dem Prinzip der Speicherung von Problemen und der Machbarkeit ausgewählt.
[Frage 2] Wie speichern Sie Protokolldaten?
Grundsätzlich wird nicht empfohlen, es in relationalen Datenbanken wie MySQL zu speichern. Schließlich ist die Anzahl der generierten Protokolle riesig. Daher wird empfohlen, sie in nicht-relationalen Datenbanken wie Elasticsearch zu speichern.
[Frage 3] Wie wird die Sammlung von Abschnittsprotokollen implementiert?
Das Abschnitt-Protokoll muss mit Spring-Aspespecpe-bezogenen JAR-Paketen eingeführt werden, und die Konfiguration lässt den Frühling einen CGGLIB-Proxy anwenden.
Open Source Project Source Code (Referenz): https://gitee.com/52itStyle/spring-boot-mail
Zusammenfassen
Das obige ist die von Redis verteilte Protokollwarteschlange für die vom Editor vorgestellte Javaweb -Projektarchitektur. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!