MQ系列(九):RabbitMQ发布者确认,消费者(确认,预取,优先级,退出通知)
发布者确认解决了消息发送传输过程中因网络故章导致丢失消息的问题,RabbitMQ 为消息者确认提供了 自动确认 和 手动确认 两种方式。
消费者预取可以限制在回传确认消息之前接收的消息数量,消费者优先级允许高优先级的消息者优先接收消息,当高优先级消费者阻塞时,消息只会传递给低优先级消费者。
发布者确认解决了消息发送传输过程中因网络故章导致丢失消息的问题,RabbitMQ 为消息者确认提供了 自动确认 和 手动确认 两种方式。
消费者预取可以限制在回传确认消息之前接收的消息数量,消费者优先级允许高优先级的消息者优先接收消息,当高优先级消费者阻塞时,消息只会传递给低优先级消费者。
RabbitMQ 提供了在声明队列时或发送消息时给消息设置过期时间。死信队列为处理过期或不能正确路由的消息提供了驻留场所,可以防止消息丢失,便于分析无法消费的原因。
消息过期时间配合死信队列可以实现延迟队列的功能。优先队列中优先级高的消息被优先消费。RabbitMQ 持久化支持交换器持久化,队列持久化,消息持久化。持久化可以提高 RabbitMQ 的可靠性,防止服务器重启或宕机导致数据丢失。
现在的 Java 应用大多会基于 Spring 框架开发,Spring 为集成 RabbitMQ 提供了封装好的依赖库 spring-rabbit
,一些重复性的工作只需要通过 XML 一次性配置。Spring Boot 也为 RabbitMQ 提供了 start 依赖库,少许配置就可直接使用。
封装带来了使用的便捷性,但仍有必要了解其内部的一些运行流程和机制,方便在实际开发过程中灵活运用,也易于快速定位和解决问题。
本篇对 RabbitMQ 原生 Java 客户端 amqp-client
的运行流程进行讲解,大致涉及连接,交换器,队列,发送消息,消费消息,消息消费确认,拒绝消息等。
RabbitMQ 是部署最广泛的开源消息代理,有成千上万的用户,是最受欢迎的开源消息中间件之一。
RabbitMQ(兔子) 轻巧,易于在内部和云上部署。可以分布式集群部署,以满足大规模,高可用性的要求。
RabbitMQ 是由 Erlang 语言开发的基于 AMQP (Advanced Message Queuing Protocol:高级消息队列协议)标准的开源实现。目前最新版本是 RabbitMQ 3.8.14(2021-03-02) 。 版本实现的 AMQP 0-9-1 版本协议。还可以通过插件的方式支持 STOMP 和 MQTT 等协议。
要使用 RabbitMQ,需先理解其基本概念,而 RabbitMQ 原生是实现 AMQP 0-9-1 版本协议的,RabbitMQ 基本概念来自于 AMQP 0-9-1 协议中的定义,所以就有必要了解协义中的相关概念。
AMQP 0-9-1(Advanced Message Queuing Protocol:高级消息队列协议)是一种消息传递协议,它两个应用可以通过中间件代理通信。RabbitMQ 实现该版本的协议,下面描述的概念和述语也是基本此版本协议。