1

J'ai une application Spring Cloud Stream qui se connecte à un serveur RabbitMQ. Nous utilisons le plugin rabbitmq-auth-backend-uaa dans Rabbit MQ, mais ce n'est pas le problème.Spring Cloud Stream Se reconnecter automatiquement au MQ Rabbit

Ce plugin vérifie un jeton JWT oAuth2.0 qui est envoyé en tant que nom d'utilisateur lors de la création de la connexion avec Rabbit MQ.

Pour ce faire, je le code dans mon application 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; 
} 

Le problème est que le jeton expirera à chaque heure et, par conséquent le nom d'utilisateur de la connexion doit être rechargé (appel tokenService.obtainAccessToken() encore).

Est-ce fait automatiquement? Comment puis-je être sûr que la connexion sera rechargée à chaque fois?

Répondre

0

Non, une définition @Bean est chargée une seule fois, lors de l'initialisation du contexte.

Vous devriez être en mesure d'ajouter un ConnectionListener à l'usine de connexion et de mettre votre logique pour reconfigurer l'usine de connexion dans la méthode onClose() (et peut-être onShutDown() depuis 2.0).