java - 异步日志记录的多线程与 JMS 队列

标签 java multithreading performance logging asynchronous

要求:记录页面浏览量和表单提交等事件。每个页面都有大约 1 秒的 SLA。该应用程序一次可以有 100 个并发用户。

日志事件存储到数据库中。

解决方案:我最初的想法是使用异步日志记录方法,其中控制权返回到应用程序,并且日志记录发生在不同的线程中(通过 Spring 的线程池任务执行器)。

但是有人建议使用 JMS 将是一种更可靠的方法。使用此方法时所需的额外工作(设置队列、写入队列、从队列读取)值得吗?

在实现这样的事情时,有哪些最佳实践/需要注意的事项(在生产环境中)?

最佳答案

这两种方法都是有效的,但如果您的应用程序意外停止,其中一种方法很容易受到攻击。在第一个场景中,尚未写入数据库的事件将会丢失。使用持久性 JMS 队列意味着将从队列中读取这些事件并在重新启动时将其保存到数据库中。

当然,如果您的数据库写入速度比将类似大小的消息放入 JMS 队列慢得多,那么您可能正在解决错误的问题?

关于java - 异步日志记录的多线程与 JMS 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909760/

相关文章:

python - 计算低于阈值的列表值的最快方法

mysql - 慢内连接顺序查询

java - 如何以编程方式检查 ImageView 的图像资源?

c++ - 为每个线程重定向标准输出/标准错误

c# - .Net 服务因新线程启动方法上的 FileNotFoundexception 而失败

c++ - 套接字编程中的多个请求/响应

java - 如何使两个复选框在 Swing 中并排放置?

java - TwiML 应用程序 - 当用户回复 Twilio Number 的 STOP/START 时调用 AWS Lambda

java - 如何告诉 maven 使用 Java5 而不是 Java6?

c++ - 成员与全局阵列访问性能