插件
放到 /usr/lib/rabbitmq/lib/rabbitmq_server-x.x.x/plugins/
启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
查看插件列表
rabbitmq-plugins list
# 对应插件前有[E*]则表示已启用(如未启用重启MQ)
service rabbitmq-server restart
代码
RabbitMqConfig
@Configuration
public class RabbitMqConfig {
final static String DELAYED_QUEUE = "delayed_queue";
final static String DELAYED_EXCHANGE = "delayed_exchange";
/**
* 使用自定义类型交换机类型:x-delayed-message
*/
@Bean
public CustomExchange delayedExchange() {
Map<String, Object> args = new HashMap<>(4);
args.put("x-delayed-type", "direct");
return new CustomExchange(DELAYED_EXCHANGE, "x-delayed-message", true, false, args);
}
@Bean
public Queue delayedQueue() {
return new Queue(DELAYED_QUEUE);
}
@Bean
public Binding pddActiveQueueBinding(Queue helloActiveQueue, CustomExchange helloActiveExchange) {
return BindingBuilder.bind(pddActiveQueue).to(pddActiveExchange).with(DELAYED_QUEUE).noargs();
}
}
MqSender
@Component
@RequiredArgsConstructor
public class MqSender {
private final RabbitTemplate rabbitTemplate;
/**
* 发送消息
*/
public void send(String msg, int delayMs) {
rabbitTemplate.convertAndSend(
RabbitMqConfig.DELAYED_EXCHANGE,
RabbitMqConfig.DELAYED_QUEUE,
msg,
message -> {
//设置消息延迟时间
message.getMessageProperties().setDelay(delayMs);
return message;
}
);
}
}
MqReceiver
@Component
@RequiredArgsConstructor
public class MqReceiver {
@RabbitListener(queues = RabbitMqConfig.DELAYED_QUEUE)
public void handle(String msg) {
// TODO 消息处理
}
}