【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);
    }
相关推荐
yq1982043011561 小时前
构建高可用资源导航平台:基于Django+Scrapy的分布式架构实践
分布式·scrapy·django
你这个代码我看不懂2 小时前
Kafka常见问题解答
分布式·kafka
Tony Bai2 小时前
Git 即数据库:Beads (bd) —— 专为 AI Agent 打造的分布式任务追踪引擎
数据库·人工智能·分布式·git
小邓睡不饱耶2 小时前
Spark Streaming实时微博热文分析系统:架构设计与深度实现
大数据·分布式·spark
北亚数据恢复2 小时前
分布式数据恢复—Ceph+TiDB数据恢复报告
分布式·ceph·数据恢复·tidb·服务器数据恢复·北亚数据恢复·存储数据恢复
Zilliz Planet2 小时前
<span class=“js_title_inner“>Spark做ETL,与Ray/Daft做特征工程的区别在哪里,如何选型?</span>
大数据·数据仓库·分布式·spark·etl
坊钰2 小时前
【Rabbit MQ】Rabbit MQ 的结构详解,传输机制!!!
java·rabbitmq
岁岁种桃花儿5 小时前
SpringCloud从入门到上天:分布式和微服务基础
分布式·spring cloud·微服务
上海锟联科技11 小时前
DAS 系统 250MSPS 是否足够?——来自上海锟联科技的专业解析
分布式·科技·分布式光纤传感·光频域反射·das
请叫我头头哥12 小时前
SpringBoot进阶教程(八十九)rabbitmq长链接及域名TTL,多机房切换配置重连能力
rabbitmq·springboot