美文网首页
主题交换机Topic exchange应防止消息堆积

主题交换机Topic exchange应防止消息堆积

作者: 天草二十六_简村人 | 来源:发表于2022-02-16 13:53 被阅读0次
    image.png

    一、背景

    和其他业务方对接mq消息, 使用的是rabbitmq的topic exchange模式。后面由于业务的变更,不需要与之对接,我就将和mq订阅消息的相关代码删除了。
    没过几天,运维发现一个队列的消息积压严重。经过排查程序是最新的,已删除了消费侧的代码,程序也不会去订阅新的消息。但是,rabbitmq后台的交换机和队列依旧存在,也需要删除,并且只能手动删除。

    二、代码示例

    1、MqConfig.java

    private String exchangeAppChangesExchange = "exchange-app-changes";
    private String exchangeAppChangesKey = "apd-app-changes";
    private String exchangeAppChangesQueue = "apd-app-changes-trade";
    
        @Bean
        public TopicExchange exchangeAppChangesExchange() {
           return new TopicExchange(getExchangeAppChangesExchange());
        }
    
        @Bean
        public Binding bindExchangeAppChangesQueue(Queue exchangeAppChangesQueue, TopicExchange exchangeAppChangesExchange) {
            return BindingBuilder.bind(exchangeAppChangesQueue).to(exchangeAppChangesExchange).with(getExchangeAppChangesKey());
        }
    
        @Bean
        public Queue exchangeAppChangesQueue() {
           return new Queue(getExchangeAppChangesQueue());
       }
    

    2、MqMessageListener.java

    @RabbitListener(queues = "#{mqConfig.exchangeAppChangesQueue}", concurrency = "4")
    public void exchangeAppChanges(@Payload List<UserAppChangesLog> userAppChangesLogList) {
    
    }
    

    三、解决办法

    手动解绑交换机到队列的绑定关系;并且删除队列。因为程序是会自动注册到rabbitmq,但是当程序删掉或不订阅mq消息时,无法做到自动剔除。如果不手动删除,会导致mq消息队列的积压越来越严重,因为此时没有了消费者,而生产的消息是越来越多。

    exchanges.png
    交换机解绑队列.png
    删除队列.png

    相关文章

      网友评论

          本文标题:主题交换机Topic exchange应防止消息堆积

          本文链接:https://www.haomeiwen.com/subject/poxdlrtx.html