代码之家  ›  专栏  ›  技术社区  ›  Vigneshwaran

当连接被RabbitMQ阻塞时,Spring amqp不会引发超时异常

  •  2
  • Vigneshwaran  · 技术社区  · 7 年前

    当RabbitMQ磁盘使用率或内存使用率达到较高阈值时,RabbitMQ将阻止连接

    在spring amqp中,每当rabbitMQ阻塞连接时,都没有关于连接失败的错误消息

    有没有办法在spring amqp中设置发布超时?

    提前感谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   David Brewer    7 年前

    默认情况下,Spring amqp中未启用阻塞连接侦听器,我们需要将阻塞连接侦听器添加到rabbitmq连接工厂bean中,以获取阻塞连接通知。

    以下代码将起作用:

    connectionFactory.addConnectionListener(new ConnectionListener() {
    
        @Override
        public void onCreate(Connection connection) {
            Channel channel = connection.createChannel(false);
            channel.getConnection().addBlockedListener(new BlockedListener() {
                @Override
                public void handleUnblocked() throws IOException {
    
                }
    
                @Override
                public void handleBlocked(String reason) throws IOException {
    
                }
            });
    
            try {
                channel.close();
            }
            catch (IOException e) {
    
            }
        }
    
        @Override
        public void onClose(Connection connection) {
    
        }
    
    });
    

    参考

    1. https://www.rabbitmq.com/connection-blocked.html
    2. Spring AMQP: Register BlockedListener to Connection