2017-08-29 93 views
0

相关SimpleMessageListenerContainer一样关闭连接我目前工作的一个基于事件的异步AMQP消息监听器,像这样:在Spring AMQP

@Configuration 
public class ExampleAmqpConfiguration { 

    @Bean(name = "container") 
    public SimpleMessageListenerContainer messageListenerContainer() { 
     SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
     container.setConnectionFactory(rabbitConnectionFactory()); 
     container.setQueueName("some.queue"); 
     container.setMessageListener(exampleListener()); 
     return container; 
    } 

    @Bean 
    public ConnectionFactory rabbitConnectionFactory() { 
     CachingConnectionFactory connectionFactory = 
      new CachingConnectionFactory("localhost"); 
     connectionFactory.setUsername("guest"); 
     connectionFactory.setPassword("guest"); 
     return connectionFactory; 
    } 

    @Bean 
    public MessageListener exampleListener() { 
     return new MessageListener() { 
      public void onMessage(Message message) { 
       System.out.println("received: " + message); 
      } 
     }; 
    } 
} 

我已经容器bean的AutoStart属性更改为false。我已经自动连接这个bean将事件利斯特时StartEvent发生启动容器:

@EventListener 
public void startContainer(StartEvent startEvent) { 
    this.container.start(); 
} 

与此同时,我也自动装配豆到停止容器和关闭容器的另一事件,希望容器将被停止,并且不会有挥之不去的连接:

@EventListener 
public void endContainer(EndEvent endEvent) { 
    this.container.stop(); 
    this.container.shutdown(); 
} 

然而,ENDEVENT后,我发现在我的RabbitMQ的管理控制台,所有通道被关闭,但仍有一个挥之不去的连接。

这是否意味着shutdown()不是用于删除延迟连接的正确方法?如果是这样的话,什么是正确的使用方法?

谢谢。

回答

1

您需要拨打resetConnection()关于CachingConnectionFactory关闭连接;如类名所示;该连接被缓存。