RabbitMQ 延迟消息的实现——延迟消息插件

发布时间 2023-12-04 18:10:25作者: 嘎嘎鸭2

 步骤:

1. 把资料中的 rabbitmq_delayed_message_exchange-3.9.0.ez 复制到docker的mq容器的插件目录

2. 执行命令 docker exec -it mq rabbitmq-plugins enable rabbitmq_delayed_message_exchange

 

在Java代码中配置延迟交换机:(图的左边是注解方式,右下角是@Bean的方式)

 比之前多加了一个 delayed = "true"

 

生产者给MQ中的延迟交换机发送 延迟消息:

 

代码示例:

1. 用注解方式声明出 可以接收延迟消息的交换机 和  队列:

@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "delay.queue", durable = "true"),//创建队列(durable参数:队列要不要持久化)
exchange = @Exchange(name = "delay.direct", type = ExchangeTypes.DIRECT, delayed = "true"),//创建交换机。delayed=true:该交换机是延迟交换机,可以接收延迟消息
key = "hi" //RoutingKey 可以写多个,也可以写一个
))
public void listenDelayQueue(String msg) {
System.out.println("消费者接收到消息:" + msg);
}

2. 发送者给交换机发消息

@GetMapping("/mq08")
public void sendDelayMessage(){
//第四个参数:后置消息处理器
rabbitTemplate.convertAndSend("delay.direct", "hi", "hui~", new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setDelay(10000);//10s
return message;
}
});

log.info("消息发送成功");
}