RabbitMQ实现发送延迟队列消息

1、RabbitMQ服务安装延时消息插件【rabbitmq_delayed_message_exchange】

Windows为例:下载延时消息插件:Community Plugins | RabbitMQ

把 下载下来的文件拷贝到RabbitMQ安装目录下的 plugins 目录。

进入RabbitMQ安装目录下的 sbin目录,在cmd窗口下执行如下命令使插件生效 如果后面发现在未失效请重启服务再查看

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

打开rabbitmq控制台,点击exchange,如果Add a new exchange功能里的Type下拉框里出现x-delayed-message类型,则说明安装成功,可以发布延时消息了

2、SpringBoot集成

2.1 在配置文件里创建配置支持延迟的交换机和队列

    /**
     * 支持延迟的交换机
     * @return
     */
    @Bean
    public CustomExchange myExchangeYC() {
        Map<String, Object> args = new HashMap<>();
        args.put("x-delayed-type", "topic");
        return new CustomExchange("YCExchange", "x-delayed-message", true, false,args);
    }

    //队列
    @Bean
    public Queue myTestQueueYC() {
        return new Queue("YC", true); // 第二个参数设为true表示队列持久化
    }

2.2 延迟消息生产者

    /**
     * 发送延迟mq消息
     * @param message
     */
    public void sendMessage5(String message) {
        rabbitTemplate.convertAndSend("YCExchange","YC", message, new MessagePostProcessor() {
            @Override
            public Message postProcessMessage(Message message) throws AmqpException {
                //设置消息持久化
                message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
                //设置消息的延迟时间为10000毫秒(即10秒)
                message.getMessageProperties().setDelay(10000);
                return message;
            }
        });
    }

2.3 延迟消息消费者

/**
     * 接收延迟消息
     * @param message
     */
    @RabbitListener(bindings = @QueueBinding(  //同时绑定交换机和队列
            exchange = @Exchange(value = "YCExchange",type = "x-delayed-message"),
            key = "YC",
            value = @Queue("YC")
    ))
    public void receiveMessage2(String message) {
        LocalDateTime now = LocalDateTime.now();
        String formatted = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(formatted + "接收延迟消息: " + message);
    }

2.4 编写控制层方法调用生产者测试,10秒后才消费到消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值