1

这个问题是为了询问我应该使用哪些工具来完成这项任务的一般建议,并可能指向我一些相关的教程。

我有一个 Spring Boot Web 应用程序,它在运行期间将日志消息生成到数据库中。这个 REST 应用程序正在制作一个 JavaScript 管理工具,它的一个功能是实时显示日志消息。这意味着,当用户在日志显示页面上时,他应该看到新的日志消息出现而无需刷新页面。

我的问题:

  • 应该使用什么来为某个端点的 javascript 客户端提供此功能?我现在正在看这些 Spring Boot 启动器:websocket、redis、amqp。我以前没有使用过这些。
  • 我应该如何“捕获”在应用程序内部生成的日志消息?所以我可以用选择的解决方案将它们发送给客户。

我并不是真的在寻找定期查询类型的解决方案,而是在寻找解决方案时推送数据的服务器。

任何建议和代码示例表示赞赏。

4

1 回答 1

3

将日志存储在数据库中通常不是一个好的选择,除非您使用能够处理大量写入请求的数据库,例如 Apache Cassandra。然而,从数据库中流式传输数据并不是最直观的事情。

一种现代替代方法是使用诸如 Apache Kafka 之类的消息传递系统将日志从生产系统流式传输到多个订阅系统。有多种方法可以实现这一目标。例如,对于来自 Spring Boot 应用程序的流式日志,您可以使用特殊的 log4j appender(参见此处和此处的示例)。为了能够在 Web 浏览器中实时显示日志,您将需要另一个后端系统,该系统将接收来自 Kafka 主题的日志记录并通过 websockets 将它们转发到 JavaScript Web 客户端,很可能使用发布者/订阅者模型。

此外,您可以考虑使用服务器发送事件 (SSE) 而不是 websockets。因为您只有一个单向消息流(日志从后端系统流式传输到浏览器中的 javascript 客户端,但不是相反),所以 SSE 作为 websockets 的替代品是一个不错的选择。Websocket 比 SSE 更难操作,通常在后端使用更多资源。与往常一样,您需要在权衡之间做出选择(请参见此处)。

于 2018-07-20T09:48:13.533 回答