Jakarta ee 调度类或编写队列
我的需求是处理java类中长时间运行的方法,当用户提交按钮时调用该方法 我需要做一些比较逻辑,这将需要很长的时间来处理,我需要一个建议,我应该使用消息队列还是使用计时器/调度器,它将在每“n”分钟/小时调用代码,并在不同的线程中进行处理 最好的方法是什么?在什么情况下我会使用 谢谢Jakarta ee 调度类或编写队列,jakarta-ee,timer,jms,scheduled-tasks,timertask,Jakarta Ee,Timer,Jms,Scheduled Tasks,Timertask,我的需求是处理java类中长时间运行的方法,当用户提交按钮时调用该方法 我需要做一些比较逻辑,这将需要很长的时间来处理,我需要一个建议,我应该使用消息队列还是使用计时器/调度器,它将在每“n”分钟/小时调用代码,并在不同的线程中进行处理 最好的方法是什么?在什么情况下我会使用 谢谢 如果您的频率不是很高(1分钟),那么从数据库中的浏览器进行轮询是可以的,特别是如果您的应用程序中已经有一个数据库,一个像Quartz这样的作业调度器,并且您“仅”使用一个servlet容器 如果响应时间很重要,考虑使
- 如果您的频率不是很高(1分钟),那么从数据库中的浏览器进行轮询是可以的,特别是如果您的应用程序中已经有一个数据库,一个像Quartz这样的作业调度器,并且您“仅”使用一个servlet容器 如果响应时间很重要,考虑使用异步servlet。同样在服务器端,一个线程可以轮询一个数据库,并有效地处理多个客户端
- 作为替代方案,使用JMS队列和消息驱动bean(MDB)替换数据库和调度器。主要区别在于编程模式:不是轮询,而是你的接收者收听:他们得到通知。通过这种方式,框架可以选择实现消息传递的最佳方法。除了一个标准的servlet容器之外,您现在还需要一个JMS提供程序,可能还需要一个EJB容器
- 您还可以将其与异步servlet相结合
onMessage
方法中的MDB如果您将检查实现为AJAX调用,则用户看不到您实际上在轮询。您的问题太广泛:定义“最佳”。你的客户端是什么(浏览器、单机应用)?所以答案是“视情况而定”。@Beryllium感谢您的回复。我有一个web应用程序在应用服务器上运行,我有一个web表单,用户可以在其中单击一个按钮来执行长时间运行的流程。由于我是JMS新手,请告诉我侦听器是否收到通知,然后开始处理,如果我单击web应用程序中的其他链接,控件转到另一个控制器,处理是否会停止…或者侦听器将在单独的线程中工作…并继续处理,假设侦听器类处于同一个WAR中。@ManishSahni我在答案中添加了一个示例。把信息传递想象成邮政服务:你有一封信,把它放在信箱里,接下来的几天你就等着邮递员了。三天后,他给了你回复(另一封信)。所以一旦你把信放进信箱,你就不能打断它,你必须等待。当然,收信人可以随意丢弃你的信,也可以随意不回复。哇,这是一个清晰而伟大的解释。这确实有助于理解这个概念。