1. 解耦                                                                                                                                                                                                    在项目开始时,很难预测项目的未来需求。通过在进程之间引入层,消息队列创建一个隐式的基于数据的接口,两个进程都实现。这允许您通过简单地确保它们遵守相同的接口要求来独立地扩展和修改这些进程。
  2. 冗余                                                                                                                                                                                                    有时处理数据时进程失败。除非数据持续存在,否则它将永远丢失。队列通过持久化数据直到完全处理来缓解这一点。许多消息队列使用的put-get-delete范例需要一个进程来明确指出在邮件从队列中删除之前已经完成了处理消息,确保您的数据保持安全,直到完成。
  3. 可扩展性                                                                                                                                                                                             因为消息队列使您的进程脱钩,因此可以轻松地扩展将消息添加到队列或处理的速率; 只需添加另一个进程。没有代码需要更改,不需要调整任何配置。缩放比添加更多的权力一样简单。
  4. 弹性和刺激性                                                                                                                                                                                      当您的应用程序打到黑客新闻的首页时,您将看到不寻常的流量。您的应用程序需要能够继续运行这种增加的负载,但流量是异常的,而不是标准; 在待机状态下拥有足够的资源来处理这些尖峰是浪费的。消息队列将允许被困扰的组件通过增加的负载进行斗争,而不是通过请求过载,并且完全失败。查看我们的Spikability博客文章了解更多信息。
  5. 弹性                                                                                                                                                                                                    当您的架构部分发生故障时,不需要将整个系统关闭。消息队列解耦过程,因此如果正在处理来自队列的消息的进程失败,那么仍然可以将消息添加到队列中以在系统恢复时进行处理。接受稍后重试或处理的请求的这种能力通常是不方便的客户和沮丧的客户之间的差异。
  6. 交付保证
        消息队列提供的冗余保证消息将被最终处理,只要进程正在读取队列。除此之外,IronMQ还提供了一次唯一的保证。无论从队列中提取数据有多少进程,每个消息只能一次处理。这是可能的,因为检索消息“保留”该消息,暂时将其从队列中删除。除非客户明确声明已完成该消息,否则该消息将被放置在队列中,以在可配置的时间量之后进行处理。
  7. 订购保证
        在很多情况下,处理数据的顺序很重要。消息队列是固有排序的,能够提供数据将以特定顺序处理的保证。IronMQ保证消息将使用FIFO(先进先出)处理,因此消息放在队列上的顺序是从中检索消息的顺序。
  8. 缓冲                                                                                                                                                                                                       在任何不平凡的系统中,都将需要不同处理时间的组件。例如,上传图像所需的时间要比应用过滤器的时间要少。消息队列通过提供缓冲层来帮助这些任务以最高效率运行,而写入队列的过程可以尽可能快地编写,而不是受到从队列读取进程的准备的约束。该缓冲区有助于控制和优化数据流经您系统的速度。
  9. 了解数据流
        在分布式系统中,掌握用户操作完成时间的长短,为什么是一个巨大的问题。消息队列通过处理速率有助于轻松识别不良数据流或数据流不最优的区域。
  10. 异步通信
        很多次,您不想或需要立即处理消息。消息队列启用异步处理,允许您将消息放在队列上,而不是立即处理。您可以随意添加多个消息,然后随意处理。