目录
-
- 一、简介
- 二、队列扩展属性清单
- 三、代码示例
-
- [3.1 实现方式一:channel.queueDeclare()](#3.1 实现方式一:channel.queueDeclare())
- [3.2 实现方式二:QueueBuilder.build()](#3.2 实现方式二:QueueBuilder.build())
一、简介
RabbitMQ
允许用户在声明队列、交换机或绑定时设置 扩展属性 (Arguments),这些扩展属性可以用于 自定义和增强消息处理的行为 。这里我们主要探讨 RabbitMQ 的 队列扩展属性。
RabbitMQ 管理界面中的队列扩展属性:
二、队列扩展属性清单
队列扩展属性清单如下:
-
x-dead-letter-exchange
:死信交换机。 -
x-dead-letter-routing-key
:死信队列的路由键。 -
x-expires
:队列在指定毫秒数后被删除。 -
x-message-ttl
:队列的消息过期时间,单位为毫秒。 -
x-max-length
:队列的消息条数限,限制加入 queue 中消息的条数。(先进先出原则,超过限制后,后面的消息会顶替前面的消息。) -
x-max-length-bytes
:队列的消息容量限制。(该参数和x-max-length
目的一样,限制队列的容量,但是这个参数是靠队列大小(bytes)来进行限制。) -
x-max-priority
:队列的优先级,最大优先值为 255。 -
x-overflow
:设置队列溢出行为。这决定了当达到队列的最大长度时消息会发生什么。有效值是:drop-head、reject-publish、reject-publish-dlx。 -
x-single-active-consumer
:表示队列是否是单一活动消费者。值为 true 时,注册的消费组内只有一个消费者消费消息,其他被忽略。
值为 false 时,消息循环分给所有消费者。(默认)
-
x-queue-mode
:将队列设置为延迟模式,在磁盘上保留尽可能多的消息,以减少 RAM 的使用。如果未设置,队列将保留内存缓存以尽快地传递消息。 -
x-queue-master-locator
:在集群模式下设置镜像队列的主节点信息。 -
x-ha-policy
:创建 HA 队列,此参数已失效。 -
x-ha-nodes
:HA 队列的分布节点,此参数已失效。
注意: 如果队列不是新建,而是 修改队列的扩展属性 ,启动程序之前需要删除原有队列 。否则会报错:inequivalent arg 'x-dead-letter-exchange'。
三、代码示例
3.1 实现方式一:channel.queueDeclare()
示例:声明一个包含扩展属性的队列。
java
Map<String, Object> args = new HashMap<>();
args.put("x-message-ttl", 60000); // 消息TTL为60秒
args.put("x-dead-letter-exchange", "myDeadLetterExchange"); // 死信交换机
args.put("x-dead-letter-routing-key", "myDeadLetterRouingKey"); // 死信路由键
channel.queueDeclare("myQueue", true, false, false, args);
3.2 实现方式二:QueueBuilder.build()
示例:声明一个包含扩展属性的队列。
java
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
Queue queue = QueueBuilder.durable("myQueue")
.withArgument("x-message-ttl", 60000) // 消息TTL为60秒
.withArgument("x-dead-letter-exchange", "myDeadLetterExchange") // 死信交换机
.withArgument("x-dead-letter-routing-key", "myDeadLetterRoutingKey") // 死信路由键
.build();
整理完毕,完结撒花~ 🌻
参考地址:
1.RabbitMQ中队列的参数,https://blog.51cto.com/morris131/6216415