1

我有一個連接到RabbitMQ服務器的Spring Cloud Stream應用程序。我們在Rabbit MQ中使用rabbitmq-auth-backend-uaa插件,但這不是問題。Spring雲流自動重新連接到兔子MQ

該插件會檢查在創建與Rabbit MQ的連接時作爲用戶名發送的oAuth2.0 JWT令牌。

要做到這一點,我有這樣的代碼在我的Spring應用程序:

@Bean 
@Primary 
ConnectionFactory connectionFactory() throws Exception { 

    //These lines get the token from the UAA automatically. 
    MyTokenService tokenService = new MyTokenService(); 
    String token= tokenService.obtainAccessToken(); // HTTP POST request to the UAA 

    AbstractConnectionFactory connectionFactory = new CachingConnectionFactory("localhost"); 
    connectionFactory.setUsername(token); 

    return connectionFactory; 
} 

的問題是,該令牌將過期每隔一小時,因此連接的用戶名已被重新加載(調用tokenService.obtainAccessToken ())。

這是自動完成的嗎?我怎樣才能確保連接每次都會重新加載?

回答

0

不,一個@Bean定義在上下文初始化期間加載一次。

您應該能夠到ConnectionListener添加到連接工廠,並把你的邏輯重新配置在onClose()方法連接工廠(和自2.0也許onShutDown())。