Spring AMQP:将BlockedListener注册到Connection

Apl*_*ana 2 amqp rabbitmq spring-amqp

我正在尝试使用Spring AMQP的RabbitTemplate实现RabbitMQ的Blocked Listener.在我的代码中我使用的是Spring-amqp 1.1.3版本的jar文件,而我也查看了1.3.1版本,这个版本也不支持.有没有人知道我是否缺少任何支持在RabbitMQ中向新连接注册阻塞侦听器的版本.或者,如果有任何未来版本的spring amqp支持此功能.

示例代码:

    Connection connection = factory.newConnection();
    connection.addBlockedListener(new BlockedListener() {
     @Override
     public void handleUnblocked() throws IOException {
        System.out.println("Connection is Unblocked");
     }

     @Override
     public void handleBlocked(String arg0) throws IOException {
        System.out.println("Connection Blocked");
     }           



    });
    com.rabbitmq.client.Channel channel = connection.createChannel();    
Run Code Online (Sandbox Code Playgroud)

Gar*_*ell 8

目前尚未开箱即用; 请随时打开改进JIRA问题.

但是,您可以将Spring AMQP添加ConnectionListenerCachingConnectionFactory...

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) {

    }

});
Run Code Online (Sandbox Code Playgroud)

即使在添加侦听器时已建立连接,也将调用它.

  • 这只是一个钩子。传递给 onCreate 的 Connection 参数不是实际的连接,而是一个包装器;`channel.getConnection()` 使我们能够访问真实的连接,这样我们就可以添加监听器。“close()”实际上并不关闭通道,而是将其返回到缓存以供将来的操作使用。 (2认同)