Потоковые сообщения журнала веб-приложения загрузки Spring
Этот вопрос предназначен для того, чтобы задать общий совет о том, какие инструменты мне следует использовать для этой задачи, и, возможно, указать мне на некоторые связанные учебные пособия.
У меня есть веб-приложение Spring Boot, которое во время работы генерирует сообщения журнала в базу данных. Для этого REST-приложения создается инструмент управления JavaScript, и одной из его функций будет отображение сообщений журнала в режиме реального времени. Это означает, что когда пользователь находится на странице журнала, он должен видеть новые сообщения журнала, появляющиеся без обновления страницы.
Мои вопросы:
- Что следует использовать, чтобы обеспечить это для клиента javascript в какой-то конечной точке? Я сейчас смотрю на эти весенние загрузчики: websocket, redis, amqp. Я не использовал ни одного из них раньше.
- Как мне "поймать" сообщения журнала, когда они генерируются внутри приложения? Чтобы я мог отправить их клиенту с выбранным решением.
Я на самом деле не ищу решение с периодическим запросом, а скорее сервер, отправляющий данные в том виде, в каком они кажутся решением.
Любые предложения и примеры кода приветствуются.
1 ответ
Хранение журналов в базе данных обычно не является хорошим вариантом, если вы не используете базу данных, которая способна обрабатывать большое количество запросов на запись, таких как Apache Cassandra. Однако потоковая передача данных из базы данных - не самая интуитивно понятная вещь.
Современная альтернатива заключается в использовании системы обмена сообщениями, такой как Apache Kafka, для потоковой передачи журналов от производственных систем к нескольким подписным системам. Есть несколько способов, как вы можете достичь этого. Например, для потоковой передачи журналов из приложения Spring Boot вы можете использовать специальный приложение log4j (см. Здесь и пример здесь). Чтобы иметь возможность представлять журналы в веб-браузере в режиме реального времени, вам понадобится другая бэкэнд-система, которая будет получать записи журналов из тем Kafka и перенаправлять их веб-клиентам JavaScript через веб-сокеты, скорее всего, с использованием модели издателя / подписчика.
Кроме того, вы можете рассмотреть возможность использования отправленных сервером событий (SSE) вместо веб-сокетов. Поскольку у вас есть только однонаправленный поток сообщений (журналы передаются от бэкэнд-системы к клиенту javascript в браузере, но не наоборот), SSE может быть хорошим вариантом в качестве замены веб-сокетов. Веб-сокеты сложнее в работе, чем SSE, и обычно они используют больше ресурсов на сервере. Как всегда, вам нужно будет выбирать между компромиссами (см. Здесь).