RabbitMQ的学习与实践

Posted by Liao on 2023-10-21

前言

在一些实时性要求不是很高的场景,可以通过异步队列,将任务放在后台执行,将会大大降低接口的耗时,提高响应速度。

一、工作原理

 RabbitMQ基于AMQP(高级消息队列协议)

Producer:消息的生产者

Connection: 生产者/消费者与队列建立的一个TCP连接

Channel:轻量级的信道,每次与MQ连接都要建立TCP连接,开销大。若应用程序支持多线程,则每个线程创建channel进行通信,建立一次TCP连接即实现队列多次的访问,极大降低了TCP连接的开销。

Exchange:交换机是消息到达MQ的第一站,根据分发规则,匹配查询表的routing key,将消息分配到不同的queue中。一个交换机可以绑定多个队列。常见类型:direct(point-to-point), topic(public-subscribe), fanout(multicast)

  • 一个队列只能有一个消费者,因为消息只能被消费一次,如果多个消费者同时消费一个队列,只有一个消费者能收到信息。
  • 队列、消息支持持久化。即使MQ宕机,消息队列也不会丢失;工作线程执行失败导致消息丢失,生产者需要告诉队列将数据存入磁盘持久化,大大保证数据不丢失的概率。

二、模式

  • simple
  • work queue
    • 轮询:每个工作现场公平轮询消费
    • 不公平分发:一些线程完成任务快,则可以多消费消息。设置预取值prefetch=?,每个机器都能提前知道性能,提前设置每个机器的消费权重。
  • Publish/subscribe