web-dev-qa-db-fra.com

Problème de connexion RabbitMQ C # lors de l'utilisation d'un nom d'utilisateur et d'un mot de passe

Je suis désemparé ici, donc je me tourne vers la connaissance collective dans l'espoir d'un miracle.

J'ai installé RabbitMQ sur une boîte Linux en utilisant les paramètres par défaut.

Lorsque j'utilise ce code (et la configuration d'installation par défaut de RabbitMQ), tout fonctionne bien.

var connectionFactory = new ConnectionFactory();
connectionFactory.HostName = "192.168.0.12";
IConnection connection = connectionFactory.CreateConnection();

Mais lorsque j'ajoute un utilisateur à RabbitMQ et que j'essaie d'utiliser le code suivant (le nom d'utilisateur et le mot de passe ont été modifiés pour protéger les innocents. :))

var connectionFactory = new ConnectionFactory();
connectionFactory.HostName = "192.168.0.12";
connectionFactory.UserName = "user";
connectionFactory.Password = "password";
IConnection connection = connectionFactory.CreateConnection();

la méthode connectionFactory.CreateConnection() lève l'exception suivante:

BrokerUnreachableException    
None of the specified endpoints were reachable

Vérification du fichier journal RabbitMQ Je peux le voir se plaindre des informations d'identification:

{amqp_error,access_refused,
"PLAIN login refused: user 'user' - invalid credentials",
'connection.start_ok'}}

Le fait est que je suis sûr du nom d'utilisateur et du mot de passe et que je ne peux pas, par amour du codage, trouver une solution à cela n'importe où.

Je dois manquer quelque chose d'évident mais je ne peux pas comprendre ce que c'est. Je serais reconnaissant pour tous les conseils utiles.

29
user181261

Il semble que j'ai trouvé une solution à mon propre problème. Le code suivant fonctionne:

ConnectionFactory factory = new ConnectionFactory();
factory.UserName = "user";
factory.Password = "password";
factory.VirtualHost = "/";
factory.Protocol = Protocols.FromEnvironment();
factory.HostName = "192.168.0.12";
factory.Port = AmqpTcpEndpoint.UseDefaultPort;
IConnection conn = factory.CreateConnection();

Merci d'avoir écouté et cela pourrait peut-être au moins être utile à quelqu'un d'autre. :)

32
user181261

Voici comment créer un utilisateur appelé agent avec le mot de passe agent, le définir sur administrator et lui donner un accès read et write à toutes les files d'attente dans le vhost /

rabbitmqctl add_user agent agent
rabbitmqctl set_user_tags agent administrator
rabbitmqctl set_permissions -p / agent ".*" ".*" ".*"
5
Mihail Shishkov

La réponse acceptée n'a pas fonctionné pour moi (sous Windows).

J'ai dû installer les outils de gestion:

rabbitmq-plugins enable rabbitmq_management

N.B. rabbitmq-plugins se trouve dans C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.1\sbin

Ensuite, redémarrez le service RabbitMQ.

J'ai ensuite installé EasyNetQ dans Visual Studio dans le gestionnaire de packages:

install-package easynetq

Une fois installé, je pourrais utiliser le site Web d'administration situé à l'adresse suivante:

http://localhost:15672

N.B. Le nom d'utilisateur et le mot de passe par défaut sont: invité

De là, j'ai sélectionné l'onglet Admin et la cause était clairement affichée en jaune en haut de l'écran:

This user does not have permission to access any virtual hosts.
Use "Set Permission" below to grant permission to access virtual hosts. 

Pour résoudre le problème, je viens d'appuyer sur le bouton Définir l'autorisation sur le même écran et le tour est joué

N.B. pour que cela fonctionne, vous devez avoir ajouté l'utilisateur en utilisant rabbitmqctl add_user username password ou similaire (rabbitmqctl est également dans le répertoire ci-dessus).

5
Robbie Dee