RabbitMq设置TTL

2022-08-11 15:54:49 浏览数 (2)

time to live:过期时间,RabbitMq可以对消息和队列设置ttl.

1.设置消息的ttl

设置消息的ttl有两种方式,一种是针对一条消息,第二种是针对队列中的所有消息。如果两种ttl都设置了,那么就选择tll小的执行。如果消费时间超过ttl,那么消息就不会被消费者消费,从而变成死信。

TTL可以通过参数进行定义。

代码语言:javascript复制
@Bean
public Queue AAQueue() {
    Map map=new HashMap<>();
    map.put("x-message-ttl",6000);
    return new Queue("AA",true,false,false,map);
}

针对每条消息设置ttl则需要我们在发送消息的时候设置expiration的属性。

代码语言:javascript复制
    /**
     * 处理消息体,添加消息id和消息的内容类型
     * @param message 消息体
     * @return
     */
    private Message dealMessage(Object message) {
        byte[] body = JSON.toJSONBytes(message, SerializeConfig.globalInstance);
        //设置消息相关属性
        MessageProperties messageProperties = new MessageProperties();
        messageProperties.setMessageId(UUID.randomUUID().toString());
        messageProperties.setContentType(MediaType.APPLICATION_JSON_VALUE);
        messageProperties.setExpiration("60000");
        return new Message(body, messageProperties);
    }

2.设置队列的ttl

使用配置x-expires修饰的消息队列会在其指定时间内,未被使用将会被删除!

代码语言:javascript复制
    @Bean
    public Queue AAQueue() {
        Map map=new HashMap<>();
        map.put("x-message-ttl",6000);
        map.put("x-expires",6000);
        return new Queue("AA",true,false,false,map);
    }

0 人点赞