官方信息
Scheduling Messages with RabbitMQ | RabbitMQ 和
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange
官方文档的使用方法
// ... elided code ...
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-delayed-type", "direct");
channel.exchangeDeclare("my-exchange", "x-delayed-message", true, false, args);
// ... more code ...
和
// ... elided code ...
byte[] messageBodyBytes = "delayed payload".getBytes();
AMQP.BasicProperties.Builder props = new AMQP.BasicProperties.Builder();
headers = new HashMap<String, Object>();
headers.put("x-delay", 5000);
props.headers(headers);
channel.basicPublish("my-exchange", "", props.build(), messageBodyBytes);
接:
第一步 Docker 找到挂在插件的卷
》〉 docker volume inspect mq-plugins
[
{
"CreatedAt": "2025-07-08T18:33:10+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mq-plugins/_data",
"Name": "mq-plugins",
"Options": null,
"Scope": "local"
}
]
到这个目录下:
cd /var/lib/docker/volumes/mq-plugins/_data
执行
>> docker exec -it rtmq rabbitmq-plugins enable rabbitmq_delayed_message_exchange
rabbitmq_delayed_message_exchange
The following plugins have been configured:
rabbitmq_delayed_message_exchange
rabbitmq_management
rabbitmq_management_agent
rabbitmq_prometheus
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@rtmq...
The following plugins have been enabled:
rabbitmq_delayed_message_exchange
rtmq 切换成你的容器名。
/**
* 通过插件配置延迟消息
* @param message
* @throws InterruptedException
*/
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "delay.queue",durable = "true"),
exchange = @Exchange(name = "delaydirect.exchange",delayed = "true",type = ExchangeTypes.DIRECT,durable = "true"),
key = {"delay.handshake"}
))
public void receiveDelayedPluginsListener(String message) throws InterruptedException {
log.info("Listener delay.queue - DLX :{} " , message + " - " + LocalDateTime.now());
}
delayed = "true" _ 设置延迟消息
@SpringBootTest
public class DelaySpringAMQPTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSimpleDLXMessage() {
// 消息
String message = " Delay message ^ .";
// Delay Send message
rabbitTemplate.convertAndSend("delay.exchange", "delay.handshake", message, message -> {
message.getMessageProperties().setDelay(20000);
return message;
});
}
}
这是一个 CPU 密集的任务;如果同时大量的 延迟消息,对 CPU 的压力会很大。