一、什么是单活模式队列
单活模式队列:为了保证消费顺序,需要只有一个实例进行按顺序消费,其他实例仅提供日常对外服务,不进行消 息消费。当唯一消费实例无法消费或掉线时,会自动开启下一个消费者进行消费,保证多个实例消费者中仅有一个正常消费,其他作为备选。
二、如何配置
根据项目依赖,三选一
HashMap<String,Object> args = new HashMap<String,Object>(); args.put("x-single-active-consumer", true); ...... //创建Queue channel.queueDeclare(queueName, true, false, false, args);
//表示队列是否是单一活动消费者,true时,注册的消费组内只有一个消费者消费消息,其他被忽略,false时消息循环分发给所有消费者(默认false) Map<String, Object> arguments = new HashMap<>(2); arguments.put("x-single-active-consumer", true); amqpAdmin.declareQueue(new Queue("aaa", true,false,false,arguments));
Map<String, Object> arguments = new HashMap<>(2); arguments.put("x-single-active-consumer", true); return new Queue("singActive", true, false, false, arguments);
启动应用后,查看控制台
三、其它参数扩展
(1)x-message-ttl:消息的过期时间,单位:毫秒; (2)x-expires:队列过期时间,队列在多长时间未被访问将被删除,单位:毫秒; (3)x-max-length:队列最大长度,超过该最大值,则将从队列头部开始删除消息; (4)x-max-length-bytes:队列消息内容占用最大空间,受限于内存大小,超过该阈值则从队列头部开始删除消息; (5)x-overflow:设置队列溢出行为。这决定了当达到队列的最大长度时消息会发生什么。有效值是drop-head、reject-publish或reject-publish-dlx。仲裁队列类型仅支持drop-head; (6)x-dead-letter-exchange:死信交换器名称,过期或被删除(因队列长度超长或因空间超出阈值)的消息可指定发送到该交换器中; (7)x-dead-letter-routing-key:死信消息路由键,在消息发送到死信交换器时会使用该路由键,如果不设置,则使用消息的原来的路由键值 (8)x-single-active-consumer:表示队列是否是单一活动消费者,true时,注册的消费组内只有一个消费者消费消息,其他被忽略,false时消息循环分发给所有消费者(默认false) (9)x-max-priority:队列要支持的最大优先级数;如果未设置,队列将不支持消息优先级; (10)x-queue-mode(Lazy mode):将队列设置为延迟模式,在磁盘上保留尽可能多的消息,以减少RAM的使用;如果未设置,队列将保留内存缓存以尽可能快地传递消息;
四、注意事项
如当前配置的单活队列已经存在,需要删除后,重新配置。