要求:记录页面浏览量和表单提交等事件。每个页面都有大约 1 秒的 SLA。该应用程序一次可以有 100 个并发用户。
日志事件存储到数据库中。
解决方案:我最初的想法是使用异步日志记录方法,其中控制权返回到应用程序,并且日志记录发生在不同的线程中(通过 Spring 的线程池任务执行器)。
但是有人建议使用 JMS 将是一种更可靠的方法。使用此方法时所需的额外工作(设置队列、写入队列、从队列读取)值得吗?
在实现这样的事情时,有哪些最佳实践/需要注意的事项(在生产环境中)?
最佳答案
这两种方法都是有效的,但如果您的应用程序意外停止,其中一种方法很容易受到攻击。在第一个场景中,尚未写入数据库的事件将会丢失。使用持久性 JMS 队列意味着将从队列中读取这些事件并在重新启动时将其保存到数据库中。
当然,如果您的数据库写入速度比将类似大小的消息放入 JMS 队列慢得多,那么您可能正在解决错误的问题?
关于java - 异步日志记录的多线程与 JMS 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909760/