消息队列

  • 什么是消息队列
    • 消息队列概念
    • 消息队列的优势
    • 消息队列的分类
  • 初识消息队列
    • 消息队列安装
    • Node.js 实现一个简单的消息队列
    • HelloWorld 消息队列的疑问与说明
    • 如何释放消息队列
  • 消息队列交换机讲解
    • fanout
    • direct
    • topic
    • headers
  • 消息队列的应用场景
    • 双十一商品秒杀/抢票功能实现
    • 积分兑换(积分可用于多平台)
    • 发送邮件,用户大数据分析等,同步变异步功能实现
    • 基于 RabbitMQ 的 Node.js 与 Python 或其它语言实现通信
  • 学后疑问
    • RPC
    • 是否消息持久化的必要?
    • 消费者完成后是否有消息应答的必要
    • 如何实现公平调度?

消息队列是在消息的传输过程中保存消息的容器

消息队列的优势

  • 应用解耦

消息队列可以使消费者和生产者直接互不干涉,互不影响,只需要把消息发送到队列即可,而且可独立的扩展或修改两边的处理过程,只要能确保它们遵守同样的接口约定,可以生产者用 Node.js 实现,消费者用 Phython 实现。

  • 灵活性和峰值处理能力

当客户端访问量突然剧增,对服务器的访问已经超过服务所能处理的最大峰值,甚至导致服务器超时负载崩溃,使用消息队列可以解决这个问题,可以通过 控制消费者的处理速度生产者可进入消息队列的数量等 来避免峰值问题。

  • 排序保证

消息队列可以控制数据处理的顺序,因为消息队列本身使用的是队列这个数据结构,FIFO(先进选出),在一些场景数据处理的顺序很重要,比如商品下单顺序等。

  • 异步通信

消息队列中的有些消息,并不需要立即处理,消息队列提供了异步处理机制,可以把消息放在队列中并不立即处理,需要的时候处理,或者异步慢慢处理,一些不重要的发送短信和邮箱功能可以使用。

  • 可扩展性

前面提到了消息队列可以做到解耦,如果我们想增强消息入队和出队的处理频率,很简单,并不需要改变代码中任何内容,可以直接对消息队列修改一些配置即可,比如我们想限制每次发送给消费者的消息条数等。

有优势肯定有它现实的应用场景,文章后面会针对优势讲它们对应的应用场景。


参考资料: