【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);
    }
相关推荐
不见长安在1 小时前
分布式ID
java·分布式·分布式id
qq_316837752 小时前
jmeter 分布式压测
分布式·jmeter
西岭千秋雪_4 小时前
Zookeeper实现分布式锁
java·分布式·后端·zookeeper·wpf
毕设源码-钟学长7 小时前
【开题答辩全过程】以 分布式菌菇销售系统为例,包含答辩的问题和答案
分布式
一叶飘零_sweeeet12 小时前
SpringBoot 集成 RabbitMQ
spring boot·rabbitmq·java-rabbitmq
千禧皓月14 小时前
【C++】基于C++的RPC分布式网络通信框架(二)
c++·分布式·rpc
杂家16 小时前
Zookeeper完全分布式部署(超详细)
大数据·分布式·zookeeper
熊小猿17 小时前
RabbitMQ死信交换机与延迟队列:原理、实现与最佳实践
开发语言·后端·ruby
雨点保护雪花17 小时前
15、RabbitMQ
分布式·rabbitmq
Lansonli21 小时前
大数据Spark(七十二):Transformation转换算子repartition和coalesce使用案例
大数据·分布式·spark