Search code examples
rabbitmqspring-rabbit

RabbitMQ delayed message plugin - How to show delayed message in admin UI?


We use the rabbitmq message delay plugin (rabbitmq_delayed_message_exchange) for delaying messages. Is it possible for debugging and monitoring purposes, to show holded / delayed messages in rabbitmq admin web interface?

Link: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/

Bye, Ben


Solution

  • No; delayed messages are not visible in the admin UI.

    As an alternative you can route the messages to a real queue, with a TTL defined as well as dead lettering which will cause expired message to be routed to the final queue.

    You can set a fixed TTL on the temporary queue or use the expiration property on individual messages.

    EDIT

    @SpringBootApplication
    public class So50760600Application {
    
        public static void main(String[] args) {
            SpringApplication.run(So50760600Application.class, args);
        }
    
        @Bean
        public ApplicationRunner runner(RabbitTemplate template) {
            return args -> template.convertAndSend("", "temp", "foo", m -> {
                    m.getMessageProperties().setExpiration("5000");
                    return m;
                });
        }
    
        @RabbitListener(queues = "final")
        public void in(String in, @Header("x-death") List<?> death) {
            System.out.println(in + ", x-death:" + death);
        }
    
        @Bean
        public Queue temp() {
            Map<String, Object> args = new HashMap<>();
            args.put("x-message-ttl", 10000); // default (max)
            args.put("x-dead-letter-exchange", "");
            args.put("x-dead-letter-routing-key", "final");
            return new Queue("temp", true, false, false, args);
        }
    
        @Bean
        public Queue finalQ() {
            return new Queue("final");
        }
    
    }
    

    and

    foo:[{reason=expired, original-expiration=5000, count=1, exchange=, time=Fri Jun 08 10:43:42 EDT 2018, routing-keys=[temp], queue=temp}]