web-dev-qa-db-fra.com

Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - La connexion a été refusée à l'aide du mécanisme d'authentification PLAIN

Je reçois en dessous de l'exception

org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - La connexion a été refusée à l'aide du mécanisme d'authentification PLAIN. Pour plus de détails, voir le fichier journal du courtier.

Configuration: RabbitMQ 3.3.5 sur Windows

Sur le fichier de configuration dans %APPDATA%\RabbitMQ\rabbit.config je l’ai fait ci-dessous, changer conformément à https://www.rabbitmq.com/access-control.html

[{rabbit, [{loopback_users, []}]}].

J'ai également essayé de créer un utilisateur/pwd - test/test ne semble pas le faire fonctionner.

J'ai essayé les étapes de this post.

Les autres détails de configuration sont comme ci-dessous:

Tomcat hébergé dans Spring Application Context:

<!-- Rabbit MQ configuration Start -->
    <!-- Connection Factory -->
    <rabbit:connection-factory id="rabbitConnFactory" virtual-Host="/" username="guest" password="guest" port="5672"/>

    <!-- Spring AMQP Template -->
    <rabbit:template id="rabbitTemplate" connection-factory="rabbitConnFactory" routing-key="ecl.down.queue" queue="ecl.down.queue" />

    <!-- Spring AMQP Admin -->
    <rabbit:admin id="admin" connection-factory="rabbitConnFactory"/>

    <rabbit:queue id="ecl.down.queue" name="ecl.down.queue" />

    <rabbit:direct-exchange name="ecl.down.exchange">
        <rabbit:bindings>
            <rabbit:binding key="ecl.down.key" queue="ecl.down.queue"/>
        </rabbit:bindings>
    </rabbit:direct-exchange>

Dans ma classe de contrôleur

@Autowired
RmqMessageSender rmqMessageSender;

//Inside a method
rmqMessageSender.submitToECLDown(orderInSession.getOrderNo());

Dans mon expéditeur de message:

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("messageSender")
public class RmqMessageSender  {

    @Autowired
    AmqpTemplate                rabbitTemplate;

    public void submitToRMQ(String orderId){
        try{
            rabbitTemplate.convertAndSend("Hello World");
        } catch (Exception e){
            LOGGER.error(e.getMessage());
        }
    }       
}

Au-dessus de l'exception Le bloc donne au-dessous de l'exception


org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - La connexion a été refusée à l'aide du mécanisme d'authentification PLAIN. Pour plus de détails, voir le fichier journal du courtier.


Journal des erreurs

  =ERROR REPORT==== 7-Nov-2014::18:04:37 ===
closing AMQP connection <0.489.0> (10.1.XX.2XX:52298 -> 10.1.XX.2XX:5672):
    {handshake_error,starting,0,
                     {amqp_error,access_refused,
                                 "PLAIN login refused: user 'guest' can only connect via localhost",
                                 'connection.start_ok'}}

Pls trouver ci-dessous l'entrée pom.xml

        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>1.3.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-amqp</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>

S'il vous plaît laissez-moi savoir si vous avez des idées/suggestions

73
Javaboy

Je suis sûr que ce qu'Artem Bilan a expliqué ici pourrait être l'une des raisons de cette erreur:

Caused by: com.rabbitmq.client.AuthenticationFailureException: 
ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. 
For details see the

mais la solution pour moi a été que je me suis connecté à la page d’administration de rabbitMQ ( http: // localhost: 15672/#/users ) avec le nom d’utilisateur et le mot de passe par défaut, guest/guest, puis ajouté un nouveau. utilisateur et pour ce nouvel utilisateur, j'ai activé l'autorisation d'y accéder à partir de l'hôte virtuel, puis utilisé le nouveau nom d'utilisateur et le nouveau mot de passe au lieu de l'invité par défaut, ce qui a effacé l'erreur.

enter image description here

92
grepit

Pour compléter @ cpu-100 réponse ,

si vous ne souhaitez pas activer/utiliser l'interface Web, vous pouvez créer de nouvelles informations d'identification à l'aide de la ligne de commande suivante et les utiliser dans votre code pour vous connecter à RabbitMQ.

$ rabbitmqctl add_user YOUR_USERNAME YOUR_PASSWORD
$ rabbitmqctl set_user_tags YOUR_USERNAME administrator
$ rabbitmqctl set_permissions -p / YOUR_USERNAME ".*" ".*" ".*"
35
Rahman

l'utilisateur 'invité' ne peut se connecter que via localhost

C'est vrai depuis RabbitMQ 3.3.x. Par conséquent, vous devez mettre à niveau la bibliothèque cliente vers la même version, ou simplement mettre à niveau Spring AMQP vers la dernière version (si vous utilisez un système de gestion des dépendances).

La version précédente du client utilisait 127.0.0.1 comme valeur par défaut pour l'option Host de ConnectionFactory.

33
Artem Bilan

L'erreur

ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

cela peut se produire si les informations d'identification que votre application tente d'utiliser pour se connecter à RabbitMQ sont incorrectes ou manquantes.

Cela s'est produit lorsque les informations d'identification RabbitMQ stockées dans le fichier web.config de mon application ASP.NET avaient une valeur de "" pour le mot de passe au lieu de la valeur de chaîne de mot de passe réelle.

7
Jon Schneider

Pour autoriser l'accès des invités à distance, écrivez ceci.

[{rabbit, [{loopback_users, []}]}].

jusqu'ici

c:\Users\[your user name]\AppData\Roaming\RabbitMQ\rabbitmq.config

puis redémarrez le service Windows rabbitmq (Source https://www.rabbitmq.com/access-control.html )

4
Peter Szanto

Nouvelle solution:

Le module de noeud ne peut pas gérer correctement : dans un mot de passe. Même si les URL sont encodées, comme si cela fonctionnerait normalement, cela ne fonctionne pas.

N'utilisez pas de caractères typiques d'une URL dans le mot de passe!

Comme l’un des suivants: : . ? + %


Original, mauvaise réponse:

Le message d'erreur indique clairement que vous utilisez PLAIN, cela ne signifie pas que les informations d'identification sont incorrectes, cela signifie que vous devez utiliser la transmission de données cryptées (TLS) au lieu du texte en clair.

Changer amqp:// dans la chaîne de connexion en amqps:// (notez que s) résout ce problème.

1
Daniel W.

Pour moi, la solution était simple: le nom d'utilisateur est sensible à la casse. Ne pas utiliser les majuscules correctes entraînera également l'erreur.

1
Michel van Engelen