2017-08-29 48 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關閉連接;如類名所示;該連接被緩存。