我有一个我正在重写的Web应用程序,它目前执行大量的审计数据sql写入。用户交互的每一步都会导致执行一些将一些信息写入数据库的方法。 由于数据库问题导致交互停止,因此可能会影响用户。
理想情况下,我希望移动这是一种基于消息的方法,其中如果需要编写数据,则会将其解雇为队列,消费者将其选中并将其写入数据库。它不是必需的数据,如果服务器出现故障,则可以接受丢失。
如果我应该尝试使用嵌入式JMS队列和代理或Java队列,我只是有点困惑。或者我不熟悉的东西(建议?)
最好的方法是什么?
更多信息: 该应用程序使用spring并在websphere 6上运行。所有消息通信都是本地的,它不会与另一台服务器通信。
答案 0 :(得分:1)
我认为使用JMS进行日志记录是过度的,尤其是如果loggin是使用JMS的唯一原因。
查看DBAppender,您可以直接登录数据库。如果您关注性能,则可以使用Logback异步记录。
答案 1 :(得分:1)
根据您对问题的描述,普通队列就足够了。你可以有一个固定大小的队列,如果填写过快,就会丢弃邮件,因为你说它们并不重要。
需要考虑的事项:
答案 2 :(得分:1)
我不确定这是否是Java EE容器中的最佳实践。
由于您已经在WebSphere机器上运行,因此您确实有一个JMS代理(SIBus)。启动异步事件的最简单方法是发送JMS消息并让MDB读取它们 - 并进行数据库插入。您可能有一些问题在WebSphere中生成自己的线程仍然可以利用JNDI资源的初始上下文。
在非Java EE的情况下,我会使用类似于普通LinkedBlockingQueue或任何阻塞队列的东西,并且只需要一个线程轮询该队列以便将新消息插入到数据库中。
答案 3 :(得分:0)
只有涉及不同的服务器时才会使用JMS队列。所以在你的情况下,我会用简单的纯Java和一些Java队列来做。