消息队列主要用于在服务器上执行异步任务。我最近读到了关于Executor框架的内容,它也做了同样的事情。管理线程以执行异步任务。谁能告诉我两者之间的区别?
答案 0 :(得分:7)
主要区别在于Executor框架用于程序内任务排队和执行,而JMS用于在不同机器上(通常)在不同机器之间进行排队。
其他差异包括:
JMS队列是(或可以是)持久的,其中Executor等仅在内存中。
JMS队列可以(我相信)在事务系统中使用,而Executor等等则不能。 (在某种程度上,这是持久性/非持久性区别的结果。)
这意味着如果我的应用程序没有分发,我可以使用Executor框架。
也许......
对于一个实例,我想编写一个fb样式的通知系统&发布订阅将使用执行程序框架吗?我假设代码将在一个数据库中位于同一台机器上。
问题是Executor框架的标准实现不会将任务队列放入数据库中。它们只是轻量级的内存数据结构。如果您的应用程序重新启动,它们不会持久化。
现在,我想你可以编写将队列放入数据库的Executor / ExecutorService类。但为什么要这么麻烦?使用JMS或类似的......会更简单。