Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用后台线程与使用消息队列_Java_Multithreading_Command_Queue_Messaging - Fatal编程技术网

Java 使用后台线程与使用消息队列

Java 使用后台线程与使用消息队列,java,multithreading,command,queue,messaging,Java,Multithreading,Command,Queue,Messaging,我目前正在处理一系列警报,这些警报将检查来自外部web服务的响应状态,并根据响应对象的状态(例如超时、无效数据等)发送警报。我希望主线程在评估响应和发送警报时继续工作 我有两个立即可用的选项: 使用ActiveMQ并将对象作为objectMessage发送到队列进行处理 使用命令模式并执行处理警报的异步命令 它们对我来说似乎都是不错的选择,但我倾向于使用线程命令,因为我不需要消息队列的大部分功能 问题:您将如何决定使用哪一个以及为什么 我会根据你的想法来决定。。。一个完整的消息队列,虽然非常强大

我目前正在处理一系列警报,这些警报将检查来自外部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服务器。