Bootstrap

RabbitMQ

一、相关概念

  1. MOM(Message-Oriented Middleware):面向消息的中间件,是一种分布式系统架构,用于在应用程序之间传递异步消息。
  2. MQ(Message Queue):消息队列,也被称为消息中间件。消息队列是典型的:生产者、消费者模型。 生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。 MQ通过异步发送和接收消息,‌实现了生产者和消费者的解耦。
  3. MQ的主要作用:异步、解耦、缓冲(削峰填谷)。
  4. JMS(Java Message Service):是一个Java平台中关于面向消息中间件(MOM)的API。JMS提供了两种消息模型,点对点和发布订阅。
  5. AMQP(Advanced Message Queuing Protocol):AMQP是一种协议,不从API层进行限定,而是直接定义网络交换的数据格式,具有跨语言和跨平台性。
  6. RabbitMQ是当前最流行,应用最广泛的面向消息的中间件之一。
  7. RabbitMQ是基于AMQP的一款消息管理系统,由Erlang语言编写,支持多种开发系统和编程语言。

二、RabbitMQ五种消息模型

RabbitMQ Tutorials | RabbitMQicon-default.png?t=N7T8https://www.rabbitmq.com/tutorials

三、怎么避免消息堆积

1.使用Work Queues搭建消费者集群,配合能者多劳充分发挥每台服务器的性能。

spring.rabbitmq.listener.simple.prefetch=1

2.使用多线程消费。

spring.rabbitmq.listener.simple.concurrency=CPU核数

四、怎么避免消息丢失

1.生产者确认机制:确保消息到达MQ。

spring.rabbitmq.publisher-confirm-type=correlated(异步非阻塞方式)

this.rabbitTemplate.setConfirmCallback(ConfirmCallback)/setReturnsCallback(ReturnsCallback)

2.消息持久化:不会因为MQ服务器宕机导致消息丢失。

springAMQP默认交换机持久化、队列持久化、消息持久化,不需要手动设置。

3.消费者确认机制:保证消费者正确无误地消费。

spring.rabbitmq.listener.simple.acknowledge-mode=manual

channel.basicAck/basicNack/basicReject()

五、死信队列和延时队列

出现以下三种情况就会变成死信(Dead Letter):

1.channel.basicNack或channel.basicReject的requeue被设置为false。

2.生存时间已到的消息。

3.消息队列满了依然有消息入队,淘汰最老的消息。

延时队列一般和死信队列一起使用。

;