【RabbitMQ】08-延迟消息

1. 延迟消息

2. 死信交换机

正常队列不需要接受消息。

java 复制代码
@Configuration
public class NormalQueueConfig {
    @Bean
    public DirectExchange normalExchange() {
        return new DirectExchange("normal.direct");
    }
    @Bean
    public Queue normalQueue() {
        return QueueBuilder
                .durable("normal.queue")
                .deadLetterExchange("dlx.direct")
                .build();
    }
    @Bean
    public Binding normalBings(Queue normalQueue, DirectExchange normalExchange) {
        return BindingBuilder.bind(normalQueue).to(normalExchange).with("hi");
    }
}

死信交换机需要key和normalQueue一样。

java 复制代码
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "dlx.queue", durable = "true"),
            exchange = @Exchange(name = "dlx.direct", type = ExchangeTypes.DIRECT),
            key = {"hi"}
    ))
    public void listenDlxQueue(String msg) {
        log.info("消费者监听 dlx.message:【{}】", msg);
    }

生产者

java 复制代码
    @Test
    void testSendDelayMessage() {
        rabbitTemplate.convertAndSend("normal.direct", "hi", "hello", message ->  {
            message.getMessageProperties().setExpiration("10000");
            return message;
        });
    }

3. DelayExchange插件


插件

java 复制代码
docker volume inspect mq-plugins
docker exec -it mq rabbitmq-plugins enable rabbitmq_delayed_message_exchange

生产者

java 复制代码
	@Test
    void testDelayMessageByPlugin() {
        rabbitTemplate.convertAndSend("delay.direct", "hi", "hello", message -> {
            message.getMessageProperties().setDelay(10000);
            return message;
        });
    }

消费者

java 复制代码
	@RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "delay.queue", durable = "true"),
            exchange = @Exchange(name = "delay.direct", delayed = "true"),
            key = {"hi"}
    ))
    public void listenDelayQueue(String msg) {
        log.info("消费者监听到 delay.queue的消息:【{}】", msg);
    }
相关推荐
城管不管4 小时前
重生——第九次面试2026.8.13某车一面
分布式·ai·面试·职场和发展·rabbitmq
apgk14 小时前
基于Canal实现mysql数据同步到消息队列(RabbitMQ/Kafka)详细操作教程
docker·kafka·rabbitmq
Rain的Java大神之路5 小时前
MQ重复消费问题怎么解决
java·经验分享·后端·面试·架构·rabbitmq·rocketmq
ly76896 小时前
分布式一致性算法详解:从 2PC、3PC 到 Paxos、Raft、ZAB
分布式·算法
珠***格6 小时前
通信链路全打通:西格电力四可装置的 4G/5G + 加密认证技术详解
大数据·数据库·分布式·5g·架构·能源
ACP广源盛139246256738 小时前
WAIC2026 国产算力浪潮@ACP#YLB3118 在算力矩阵中的存储定位与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
蜀道山老天师10 小时前
ZABBIX分布式监控Proxy应用实践
分布式·zabbix
liudashuang201710 小时前
Kafka Producer 隐藏深坑:Sender 线程自阻塞(自死锁)导致 BufferExhaustedException 完整复盘
java·分布式·kafka·linq
hard_hot12 小时前
RabbitMQ异步下单架构设计
java·rabbitmq·java-rabbitmq
rustfs12 小时前
GitLab 如何与 RustFS 集成?
分布式·rust·gitlab