我什么时候会使用像ironMQ这样的消息队列,何时会使用像ironWorker这样的工作处理工作者?
我刚刚开始研究这两个主题,我发现很难区分这两个用途。我理解一个worker或多或少是一个沙盒,它将在app服务器之外的不同环境中运行程序,以增加用户体验。我也理解消息队列很像它的数据库替代方案,其中任务被添加到队列,然后另一个服务器/编程侦听该任务,然后将处理它。然而,虽然我认为我明白他们是什么,但我无法区分何时使用每一个以及为什么。
如果我理解正确,我会使用工作人员完成图像处理等任务。但是为什么我不能使用消息队列,更重要的是为什么不呢?当然,我可以在ironMQ中排队一个图像URL,然后再检索并处理它。在我看来,这似乎是一个额外的步骤,所以我会避免这一点。
当工作人员可用时,对于常见任务,消息队列对我来说似乎毫无意义。当然,对于发表评论这样的非密集型任务,我可以让工人这样做吗?
我可能误解了每个工具之间的区别,如果是这样,请让我直截了当。否则,请帮忙。
答案 0 :(得分:11)
它们密切相关,所以我能理解这种混乱。它们都是基于队列的系统,一个是消息队列,一个是任务/作业队列。这是一般的经验法则:
所以不,如果您正在使用IronWorker,则不需要消息队列,因为IronWorker是您的消息队列+您对该队列的处理。
不要添加任何混淆,但有些人也一起使用IronWorker和IronMQ,工作人员将消息从IronMQ中删除。这种模式适用于非常短的任务来分摊工作人员的设置/拆卸(建立数据库连接或工人必须做的任何设置)。
答案 1 :(得分:4)
当您想要将某些数据发送到其他进程,应用程序的一部分,甚至是不同的应用程序时,消息队列非常有用。它像管道一样工作,将数据传输到另一侧。例如,我有10家网上商店,顾客在那里买东西。我想在一台服务器上处理所有签出。有几种方法可以将商店连接到处理中心:
像IronMQ这样的云服务可以提供基础架构支持,为许多语言提供简单的库,具有出色的基于Web的UI等。
用于异步处理的IronWorker等系统也是如此。例如,如果我有小应用程序,我可以在我的服务器上做这样的工作。它只需要使用专门的库。在中型应用程序的情况下,我可以设置服务器并安装软件以进行异步任务处理。如果我拥有包含大量任务的庞大应用程序,则需要支持可扩展的基础架构,任务负载均衡器等。
为开发人员提供云服务的公司是通过AWS等服务编程的基础架构控制器层。它们为其服务提供简单的API,支持基础架构并为不同语言提供大量客户端库。