【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);
    }
相关推荐
Pitayafruit38 分钟前
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
redis·分布式·后端
久念祈1 小时前
C++ - 仿 RabbitMQ 实现消息队列--客户端模块实现
分布式·rabbitmq
Code季风2 小时前
分布式系统中的幂等性设计:从理论到实现的全面指南
redis·分布式·微服务
dessler2 小时前
RabbitMQ-日常运维命令
linux·运维·rabbitmq
都叫我大帅哥3 小时前
RabbitMQ惰性队列:拯救内存的“树懒”战士 🦥
java·rabbitmq
右手嘚温暖9 小时前
分布式事务Seata、LCN的原理深度剖析
spring boot·分布式·后端·spring·spring cloud·中间件·架构
vision_wei_13 小时前
Redis中间件(二):Redis协议与异步方式
网络·数据库·c++·redis·分布式·缓存·中间件
爱学习的小熊猫_15 小时前
在Linux上部署RabbitMQ、Redis、ElasticSearch
linux·redis·elasticsearch·中间件·rabbitmq
风与尘15 小时前
RabbitMQ延时队列的两种实现方式
spring boot·分布式·中间件·rabbitmq
Keya18 小时前
鸿蒙开发样式复用:@Styles、@Extend与AttributeModifier深度对比
前端·分布式·harmonyos