Rabbitmq 延时消息

本文详细介绍了如何在RabbitMQ中配置并使用延迟消息交换器,包括安装rabbitmq_delayed_message_exchange插件、配置Docker环境、创建延迟交换器、队列绑定及消息发送接收的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理网上一大堆,比我说的清楚,大家可以去看看,这里就不说了。

安装配置

注意 plugins 的处理,因为需要安装一个 rabbitmq_delayed_message_exchange 插件,在 3.7.13 版本中无法使用 rabbitmq-plugins enable rabbitmq_delayed_message_exchange 进行安装,会提示找不到,所以只能自己上 https://www.rabbitmq.com/plugins.html 去下载。

version: '3.1'
services:
  rabbitmq:
    restart: always
    image: rabbitmq:management
    container_name: rabbitmq
    ports:
      - 5672:5672
      - 15672:15672
    environment:
      TZ: Asia/Shanghai
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin
    volumes:
      - ./data:/var/lib/rabbitmq
      - ./data:/etc/rabbitmq
      - ./plugins:/plugins

在处理plugins之后,注意配置一下 enabled_plugins

[rabbitmq_management,rabbitmq_delayed_message_exchange].
使用

配置delayExchange,队列,并且绑定。

@Configuration
public class RabbitConfig {

    @Bean
    public FanoutExchange delayExchange() {
        HashMap<String, Object> args = new HashMap<>();
        args.put("x-delayed-type", "direct");
        FanoutExchange topicExchange = new FanoutExchange("delay_exchange", true, false, args);
        topicExchange.setDelayed(true);
        return topicExchange;
    }

    @Bean
    public Queue queue() {
        Queue queue = new Queue("delay_queue");
        return queue;
    }

    @Bean
    public Binding binding() {
        return BindingBuilder.bind(queue()).to(delayExchange());
    }
}

发送消息

rabbitTemplate.convertAndSend("delay_exchange", queue, msg, message -> {
    message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
    // 这里的时间用来设置延时多久
    message.getMessageProperties().setHeader("x-delay", 30000);
    return message;
});

接收消息

@Component
public class MessageReceiver {
    @RabbitListener(queues = "delay_queue")
    public void receive(String msg) {
        System.out.println("接收到的消息:"+msg);
    }
}

转载于:https://www.cnblogs.com/Godfunc/p/10722437.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值