Springboot統合rabbitmqメッセージキューのTTL


一:キューの統一期限切れ


1.ttl生産側で符号化
// 
    public static final String TTL_QUEUE = "delay_queue";

    public static final String TTL_NAME = "delay_exchange";

    //ttl ( )
    private static final int TTL_EXPIRATION = 10000;


    /*
    *  
    */
    @Bean
    public Queue TTlQueue(){
        return QueueBuilder.durable(TTL_QUEUE).withArgument("x-message-ttl", TTL_EXPIRATION).build();
    }

    @Bean
    public TopicExchange TTlExchange(){
        return new TopicExchange(TTL_NAME);
    }

    // 
    @Bean
    public Binding TTlBinding(){
        return BindingBuilder.bind(TTlQueue()).to(TTlExchange()).with("*.ttt");
    }

2.テスト
/*
         TTL
     */

    @Test
    void TTL() {

        rabbitTemplate.convertAndSend(RabbitMQConfig.TTL_NAME,"xiaomi.ttt","hello jsp!");
    }

二:メッセージの単独期限切れ

@Test
    void TTL() {


        // , 
        MessagePostProcessor messagePostProcessor= new MessagePostProcessor(){

            @Override
            public Message postProcessMessage(Message message) throws AmqpException {
                // message 
                message.getMessageProperties().setExpiration("5000");// 

                return message;
            }
        };

        rabbitTemplate.convertAndSend(RabbitMQConfig.TTL_NAME,"xiaomi.ttt","hello jsp!",messagePostProcessor);
    }

注意:時間を変更したい場合は、元のキューを削除してから実行します!!!