Для отложенной доставки есть ещё один вариант, который работает на RabbitMQ даже без плагинов. Изначальное сообщение (с нужным TTL) отправляется в очередь на которую нет консюмеров, и когда заканчивается TTL, RabbitMQ перекладывает это сообщение в другой exchange, указанный как dead letter в метаданных сообщения. На этом принципе часто делается delayed retry для сообщений, которые не удалось обработать с первого раза.
Пример использования RabbitMQ Delayed Message Exchange в Java Spring Framework