2017-07-18 156 views
1

我的應用程序後會失去連接到RabbitMQ的服務器,我在日誌中看到RabbitMQ:重新連接後爲什麼不重新打開頻道?

ERROR ... o.s.a.r.c.CachingConnectionFactory : Channel shutdown: connection error 

然後當我的應用程序重新連接到RabbitMQ的服務器,我在日誌中看到

INFO ... Created new connection: [email protected] [delegate=amqp://******] 

但是當應用程序重新連接到RabbitMQ服務器,通道不會重新打開,在RabbitMQ管理控制檯中,我可以在'Channels'選項卡中看到沒有任何通道。

在重新連接後的RabbitMQ服務器日誌:

=INFO REPORT==== 13-Jul-2017::10:33:39 === 
accepting AMQP connection (*.*.*.*:* -> *.*.*.*:5672) 

=INFO REPORT==== 13-Jul-2017::10:33:39 === 
Connection (*.*.*.*:* -> *.*.*.*:5672) has 
a client-provided name: rabbitConnectionFactory#1 

=INFO REPORT==== 13-Jul-2017::10:33:39 === 
connection (*.*.*.*:* -> *.*.*.*:5672 - 
rabbitConnectionFactory#1): user '***' authenticated and granted access to vhost '***' 

我使用Spring 1.5.3引導和彈簧引導起動AMQP

它看起來像Spring AMQP 1.7禁用的RabbitMQ客戶端的「enableAutomaticRecovery」,並使用它自己的恢復機制

的4.0.x的客戶端能夠自動恢復默認;在與此功能兼容的同時,Spring AMQP具有自己的恢復機制,通常不需要客戶端恢復功能。建議禁用AMQP客戶端的自動恢復功能,以避免收到AutoRecoverConnectionNotCurrentlyOpenException■當經紀人是可用的,但連接尚未恢復。從版本1.7.1開始,Spring AMQP將禁用它,除非您顯式創建自己的RabbitMQ連接工廠並將其提供給CachingConnectionFactory。由RabbitConnectionFactoryBean創建的RabbitMQ ConnectionFactory實例也將默認禁用該選項。

我不知道這有什麼關係的問題。

需要注意的是,如果我關閉我的應用程序並重新啓動它,它的行爲如預期。

回答

0

春AMQP關閉automaticRecovery通過default

private static com.rabbitmq.client.ConnectionFactory newRabbitConnectionFactory() { 
    com.rabbitmq.client.ConnectionFactory connectionFactory = new com.rabbitmq.client.ConnectionFactory(); 
    connectionFactory.setAutomaticRecoveryEnabled(false); 
    return connectionFactory; 
} 

您可以通過RabbitConnectionFactoryBean開啓:

/** 
* Set to true to enable amqp-client automatic recovery. Note: Spring AMQP 
* implements its own connection recovery and this is generally not needed. 
* @param automaticRecoveryEnabled true to enable. 
* @since 1.7.1 
*/ 
public void setAutomaticRecoveryEnabled(boolean automaticRecoveryEnabled) { 
    this.connectionFactory.setAutomaticRecoveryEnabled(automaticRecoveryEnabled); 
} 

春季AMQP外的開箱自動恢復好聽衆的容器,但我想你處理RabbitTemplate。因此,可以考慮將其打開:http://docs.spring.io/spring-amqp/reference/html/_reference.html#auto-recovery

相關問題