RabbitMQ使用延迟插件实现延迟消息

插件地址:

html 复制代码
https://github.com/rabbitmq/rabbitmq-lvc-exchange/releases
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases?page=1

可根据上述地址找到自己安装的Rabbitmq对应的版本

安装插件​​:

将下载的 rabbitmq_delayed_message_exchange-3.8.0.ez 文件放到 RabbitMQ 的插件目录中(通常是 /usr/lib/rabbitmq/lib/rabbitmq_server-/plugins/)

然后使用 RabbitMQ 的命令行工具启用插件:

bash 复制代码
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

若出现,说明安装成功:
[root@MiWiFi-RA72-srv plugins]# sudo rabbitmq-plugins enable rabbitmq_delayed_message_exchange
Enabling plugins on node rabbit@MiWiFi-RA72-srv:
rabbitmq_delayed_message_exchange
The following plugins have been configured:
  rabbitmq_delayed_message_exchange
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@MiWiFi-RA72-srv...
The following plugins have been enabled:
  rabbitmq_delayed_message_exchange

started 1 plugins.

添加依赖​:

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

在 application.yml 或 application.properties 中配置 RabbitMQ 连接:

yaml 复制代码
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
java 复制代码
//RabbitMq公共配置类
public class RabbitMqConfig {
    //延时交换机
    public static final String DIRECT_DELAYED_EXCHANGE = "direct_delayed_exchange";
    public static final String DELAYED_ROUTING_KEY = "delayed_routing_key";
    public static final String DIRECT_DELAYED_QUEUE = "direct_delayed_queue";
}
java 复制代码
@Configuration
public class DirectRabbitConfig implements BeanPostProcessor {

    @Resource
    private RabbitAdmin rabbitAdmin;


    @Bean
    public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
        RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
        //只有设置为true,spring才会加载RabbitAdmin 这个类
        rabbitAdmin.setAutoStartup(true);
        return rabbitAdmin;
    }

    //--------------------------------延迟交换机与队列-------------------------------------
    @Bean
    public DirectExchange delayExchange() {
        return ExchangeBuilder.directExchange(RabbitMqConfig.DIRECT_DELAYED_EXCHANGE )
                .delayed()          //设置delay的属性为true
                .durable(true)      //持久化
                .build();
    }

    @Bean
    public Queue delayQueue() {
        return new Queue(RabbitMqConfig.DIRECT_DELAYED_QUEUE , true, false, false);
    }

    @Bean
    public Binding bindDelayQueue() {
        return BindingBuilder.bind(delayQueue()).to(delayExchange()).with(RabbitMqConfig.DELAYED_ROUTING_KEY );
    }



    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        //创建交换机
        rabbitAdmin.declareExchange(delayExchange());
        rabbitAdmin.declareQueue(delayQueue());
        return null;
    }

}

生产者发送延迟消息:

java 复制代码
@Component
public class DelayedMessageProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendDelayedMessage(String message) {
        //发送消息
        rabbitTemplate.convertAndSend(RabbitMqConfig.DIRECT_DELAYED_EXCHANGE , RabbitMqConfig.DELAYED_ROUTING_KEY,
                    message, m-> {
                        m.getMessageProperties().setDelay(10000);//延时10s
                        return m;
                    });
    }
}

消费者接收延迟消息​:

java 复制代码
@Component
public class DelayedMessageConsumer {

    @RabbitListener(queues = RabbitMqConfig.DIRECT_DELAYED_QUEUE)
    public void receiveDelayedMessage(String message) {
        System.out.println("Received delayed message: " + message);
    }
}
相关推荐
聪明的笨猪猪37 分钟前
Java “并发容器框架(Fork/Join)”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
绿油果4 小时前
Javaweb(BeanUtils)
java·web
拧之5 小时前
✅XXL-JOB的基本使用
java
老朋友此林6 小时前
MongoDB GEO 项目场景 ms-scope 实战
java·数据库·spring boot·mongodb
豆沙沙包?7 小时前
2025年--Lc165--H637.二叉树的层平均值(二叉树的层序遍历)--Java版
java·开发语言
迎風吹頭髮8 小时前
UNIX下C语言编程与实践40-UNIX 全局跳转:setjmp 与 longjmp 函数的使用与注意事项
java·c语言·unix
春风霓裳8 小时前
maven-setting配置
java·maven
小蒜学长8 小时前
springboot二手儿童绘本交易系统设计与实现(代码+数据库+LW)
java·开发语言·spring boot·后端
wangwangmoon_light9 小时前
0.0 编码基础模板
java·数据结构·算法
Terio_my10 小时前
Spring Boot 热部署配置与自定义排除项
java·spring boot·后端