resumen:
La arquitectura, distribuida, la cola de registro y el título en sí es una función de recopilación de registros, pero se agrega un redis en el medio para hacer una cola de mensajes. ¿Por qué necesito una cola de mensajes? Cuando los factores como la "producción" y el "consumo" aparecen en el sistema son inconsistentes, se necesita una cola de mensajes para actuar como una capa abstracta para cerrar las diferencias entre las dos partes.
La arquitectura, distribuida, la cola de registro y el título en sí es una función de recopilación de registros, pero se agrega un redis en el medio para hacer una cola de mensajes.
¿Por qué necesito una cola de mensajes?
Cuando los factores como la "producción" y el "consumo" aparecen en el sistema son inconsistentes, se necesita una cola de mensajes para actuar como una capa abstracta para cerrar las diferencias entre las dos partes.
Por ejemplo, el correo electrónico común y el envío de SMS en nuestro sistema escriben estas funciones que no requieren una respuesta oportuna a la cola, procesan solicitudes de forma asincrónica y reducen el tiempo de respuesta.
¿Cómo lograrlo?
Hay muchos productos de middleware de cola de mensajes JMS maduros en el mercado, pero según la situación actual de la arquitectura del proyecto y la implementación, utilizamos Redis como cola de mensajes.
¿Por qué usar Redis?
La estructura de datos de la lista en Redis tiene las características de "colas de doble extremo", y Redis tiene la capacidad de persistir datos, por lo que Redis es muy seguro y confiable para implementar colas distribuidas.
Es similar a la "cola" en JMS, excepto que la funcionalidad y la confiabilidad (transaccionalalidad) no son tan estrictas como JMS. Redis en sí tiene un diseño distribuido de alto rendimiento y "conveniente" (réplicas, fragmentos), que pueden proporcionar una buena base para implementar "colas distribuidas".
Lado del proveedor
El proyecto utiliza un complemento de terceros Redis Data-Data-Redis. Si no está seguro de cómo usarlo, Google o 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 = 100000
Configuración de Redis:
< value = "$ {redis.timeout}" /> <propiedad name = "fiscalconfig" ref = "jediscoolconfig" /> <propiedad name = "usepool" valor = "true" /> < /bean> <bean id = "redistemplate"> <Property name = "Connectatory" Ref = "JedisconnectionFactory" /> </Bean> Configuración de registro seccional (pseudocódigo):
/*** Registro del sistema, Clase de procesamiento de facetas* Creador Xiaoqi 2012* Tiempo de creación 15 de enero de 2018*/@componente@scope@spublic class syslogaspect {@aUtowired private redistemplate <string, string> redistemplate; // Las anotaciones se basan en la API de Swagger, y también puede definir @PointCut (" @annotation (io.swagger.annotations.apioperation)") public void logPointCut () {} @around ("logPointCut ()") Objeto público alrededor (procedimiento de punto de procedimiento). // Escribir mensajes de registro en ItSstyle_log canal redistemplate.convertandSend ("itStyle_log", "registrar datos, procesarlo por usted mismo"); resultado de retorno; }}Lado del consumidor
Configuración de Redis:
< valor = "$ {redis.timeout}" /> <propiedad name = "petrowConfig" ref = "jediscoolconfig" /> <propiedad name = "usePool" valor = "true" /> < /bean> <bean id = "redistEmplate" p: conection-factory-ref = "jedisconnectionFactory"> <name de propiedad = "keyserializer"> <<> <> <> <> <propiedad> <propiedad> <propiedad> <propiedad <propiedad <Propiedad <propiedad <Propiedad <propiedad <Propiedad <propiedad <Propiedad <propiedad <Propiedad <propiedad <Propiedad <propiedad <MOTERY <PROPETERY <PROPIETAD name = "HashkeySerializer"> <Bean/> </property> </reme> <!-Escuchar a la clase de implementación-> <bean id = "oyente"/> <bean id = "stringRedisSerializer"/> <redis: oyente-continer conexión-factory = "jedisconnectionFactory"> <!-Topic representa el canal a monitor, que es un partido habitual, que es realmente el canal en realidad el canal que desea, el canal que desea- <Redis: Listener ref = "Listener" Serializer = "StringRedisserializer" Method = "HandLelog" topic = "itStyle_log"/> </redis: oyente-Container>Interfaz de escucha:
Interfaz pública MessageLegateListener {public void handlelog (mensaje serializable);}Implementación de escucha:
clase pública MessageElegateListenerImpl implementa MessageLegateListener {@Override public void HandLelog (Mensaje serializable) {if (Message == NULL) {System.out.println ("NULL"); } else {// Datos de registro de procesos}}}Preguntas y respuestas
【Pregunta 1】 ¿Por qué usar Redis?
En realidad, ya hay explicaciones anteriores, aunque hay muchos productos muy estables en el mercado, como Kafka, Rabbitmq y RocketMQ que se le ocurra. Sin embargo, dado que el proyecto en sí utiliza Redis como caché distribuido, Redis se selecciona en función del principio de ahorrar problemas y viabilidad.
[Pregunta 2] ¿Cómo almacenar datos de registro?
En principio, no se recomienda almacenarlo en bases de datos relacionales, como MySQL. Después de todo, el número de registros generados es enorme, por lo que se recomienda almacenarlo en bases de datos no relacionales como ElasticSearch.
[Pregunta 3] ¿Cómo se implementa la colección de registros seccionales?
El registro de la sección debe introducir paquetes JAR relacionados con Spring-Aspects, y la configuración hace que Spring adopte un proxy CGLIB.
Código fuente del proyecto de código abierto (referencia): https://gitee.com/52itstyle/spring-boot-mail
Resumir
Lo anterior es la cola de registro distribuido Redis para la arquitectura del proyecto Javaweb presentada por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!