Java 使用后台线程与使用消息队列
我目前正在处理一系列警报,这些警报将检查来自外部web服务的响应状态,并根据响应对象的状态(例如超时、无效数据等)发送警报。我希望主线程在评估响应和发送警报时继续工作 我有两个立即可用的选项:Java 使用后台线程与使用消息队列,java,multithreading,command,queue,messaging,Java,Multithreading,Command,Queue,Messaging,我目前正在处理一系列警报,这些警报将检查来自外部web服务的响应状态,并根据响应对象的状态(例如超时、无效数据等)发送警报。我希望主线程在评估响应和发送警报时继续工作 我有两个立即可用的选项: 使用ActiveMQ并将对象作为objectMessage发送到队列进行处理 使用命令模式并执行处理警报的异步命令 它们对我来说似乎都是不错的选择,但我倾向于使用线程命令,因为我不需要消息队列的大部分功能 问题:您将如何决定使用哪一个以及为什么 我会根据你的想法来决定。。。一个完整的消息队列,虽然非常强大
问题:您将如何决定使用哪一个以及为什么 我会根据你的想法来决定。。。一个完整的消息队列,虽然非常强大,但比您需要的要大得多。更不用说它是另一个进程/服务器/等等。因此,我会投票支持第二个选项。:-) 两个字: 保证交货
如果这对您很重要,那么消息队列就是您所需要的。听起来您正在整合一些东西来处理应用程序中的事件。为此,你有很多选择。消息队列有助于保证传递(可以提供持久性)并允许将消息发送到多个服务器 concurrent的ExecutorService允许您提交要在线程池上执行的任务。它返回的未来允许您在以后继续处理和检查结果
Future<?> submit(Runnable task)
未来提交(可运行任务)
如果这不完全是您所需要的,那么java.util.concurrent中可能还有其他选项。是的,我也在这样学习。我应该提到的是,activemq已经在这个应用程序中做了很多事情,并且正在使用webapp在jvm中运行。我可以使用一个持久队列,它可以提高重启和其他服务器事件的可靠性。这是一个很好的观点——如果在整个集群中有必要,消息队列可能更有意义,但在这种情况下,由于每个服务器只处理一部分响应,因此每个服务器可以线程化命令。另一方面,持久队列将提高可靠性…@Dave Correct,它将提高可靠性。这是要求吗?请记住,如果应用程序崩溃,事件丢失是否重要?这取决于应用程序类型,这是否重要。在这种情况下,100%的可靠性不是一个要求,但它不会损害任何期望可靠的警报,我还没有开始编写代码。。。根据你的经验,你对其中一种与另一种的资源成本有什么普遍的认识吗?@davejms更为重要。除了应用程序之外,您还需要关注JMS服务器的部署、配置等。我倾向于轻量级方法,如果需要的话,我会增加复杂性。如果需要,您可以随时稍后添加JMS队列。在这种情况下,ActiveMQ已经在jvm中运行,并处理其他异步任务(如果有必要):vm://localhost?broker。它已部署到应用程序的每个服务器,因此此应用程序没有专用的JMS服务器。