美文网首页
主题交换机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