краткое содержание:
Архитектура, распределенная, очередь журнала, и само название является функцией сбора журналов, но в середине добавляется REDIS, чтобы составить очередь сообщений. Зачем мне очередь сообщения? Когда такие факторы, как «производство» и «потребление», появляются в системе, противоречивы, необходима очередь сообщений, чтобы выступать в качестве абстрактного слоя, чтобы преодолеть различия между двумя сторонами.
Архитектура, распределенная, очередь журнала, и само название является функцией сбора журналов, но в середине добавляется REDIS, чтобы составить очередь сообщений.
Зачем мне очередь сообщения?
Когда такие факторы, как «производство» и «потребление», появляются в системе, противоречивы, необходима очередь сообщений, чтобы выступать в качестве абстрактного слоя, чтобы преодолеть различия между двумя сторонами.
Например, общая электронная почта и SMS -отправка в нашей системе записывает эти функции, которые не требуют своевременного ответа на очередь, асинхронно обрабатывают процессы и сокращают время отклика.
Как это достичь?
На рынке есть много зрелых продуктов JMS -Queue Opsue Minderwake, но, основываясь на текущей ситуации архитектуры проекта и развертывания, мы используем Redis в качестве очереди сообщений.
Зачем использовать Redis?
Структура данных в списке в Redis имеет характеристики «двойных очередей», и Redis имеет возможность сохранять данные, поэтому Redis очень безопасен и надежен для реализации распределенных очередей.
Это похоже на «очередь» в JMS, за исключением того, что функциональность и надежность (транзакционность) не так строги, как JMS. Сам Redis имеет высокую производительность и «удобную» распределенный дизайн (Replicas, Sharding), которая может обеспечить хорошую основу для реализации «распределенных очередей».
Сторона провайдера
В проекте используется сторонний плагин Redis Spring-Data-REDIS. Если вы не уверены, как его использовать, пожалуйста, Google или 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.testonborw = true Redis.timeout = 100000
Конфигурация Redis:
<!-Конфигурация Redis-> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionfactory"> <name = "hostname" value = "$ {redis.host}" /> <name = "port" value = "$ {redis.port}" /> <property = "pally" valu value = "$ {redis.timeout}" /> <name = "poolconfig" ref = "jedispoolconfig" /> <name = "usepool" value = "true" /> < /bean> <bean id = "redistemplate"> <property name = "connectionfactory" ref = "jedisconcenectionFactory" /> < /bean> Конфигурация журнала секции (псевдокод):
/*** Системный журнал, класс обработки аспектов* Создатель xiaoqi 2012* Время создания 15 января 2018*/@component@scope@apsivepublic class syslogaspept {@autowired private redistemplate <String, String> Redistemplate; // аннотации основаны на Swagger API, и вы также можете определить @pointcut (" @annotation (io.swagger.annotations.apioperation)") public void logpointcut () {} @Around ("logpointCut ()") Общедоступный объект вокруг (продолжение точка -точка) Throwseable {object result = pointecdeced ();); // Написать сообщения журнала в ITSTYLE_LOG Channel Redistemplate.convertAndsend ("itStyle_log", "log data, обрабатывайте его самостоятельно"); результат возврата; }}Потребительская сторона
Конфигурация Redis:
<!-Конфигурация Redis-> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionfactory"> <name = "hostname" value = "$ {redis.host}" /> <name = "port" value = "$ {redis.port}" /> <property = "pally" valu value="${redis.timeout}" /> <property name="poolConfig" ref="jedisPoolConfig" /> <property name="usePool" value="true" /> </bean> <bean id="redisTemplate" p:connection-factory-ref="jedisConnectionFactory"> <property name="keySerializer"> <bean /> </property> <property name = "hashkeyserializer"> <bean/> </property> </bean> <!-прослушивание класса реализации-> <bean id = "Слушатель"/> <bean id = "stringredisserializer"/> <redis: слушатель-container connection-factory = "jedisconnectionFact"> <!-тема представляет канал, который на самом деле является регулятором, который на самом деле является матчем, который на самом деле является актуальным матчем, который на самом деле является актуальным матчем, который на самом деле является актуальным матчем, который на самом деле является актуальным каналом, который на самом деле представляет собой канал, который на самом деле является актуальным матчем, который на самом деле является подбором. <redis: слушатель ref = "слушатель" serializer = "stringredisserializer" method = "handlelog" toma = "itStyle_log"/> </redis: слушатель-container>Интерфейс прослушивания:
Общедоступный интерфейс MossagedeLegateListener {public void handlelog (serializable message);}Реализация прослушивания:
открытый класс MessagedeLegateListenerImpl реализует MassAgeLegateListener {@Override public void handleLog (serializable message) {if (message == null) {System.out.println ("null"); } else {// данные журнала процесса}}}Q & A.
【Вопрос 1】 Зачем использовать Redis?
На самом деле, на рынке уже есть объяснения, хотя на рынке есть много очень стабильных продуктов, таких как Kafka, Rabbitmq и RocketMQ, о которых вы можете подумать. Однако, поскольку сам проект использует Redis в качестве распределенного кэша, Redis выбирается на основе принципа проблем со сбережениями и выполнимости.
[Вопрос 2] Как хранить данные журнала?
В принципе, не рекомендуется хранить его в реляционных базах данных, таких как MySQL. В конце концов, количество сгенерированных журналов огромно, поэтому рекомендуется хранить его в нереляционных базах данных, таких как Elasticsearch.
[Вопрос 3] Как реализуется сбор журналов секционных журналов?
Журнал разделов должен ввести связанные с пружинами пакеты JAR, а конфигурация заставляет Spring принять прокси CGLIB.
Исходный код проекта с открытым исходным кодом (ссылка): https://gitee.com/52itstyle/spring-boot-mail
Суммировать
Выше приведено распределенная очередь журнала Redis для архитектуры проекта Javaweb, введенной вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!