RabbitMQ C# connection trouble when using a username and password

user181261 picture user181261 · Feb 13, 2011 · Viewed 34.7k times · Source

I am at a loss here so I'm reaching out to the collective knowledge in hope of a miracle.

I have installed RabbitMQ on a Linux box using the defaults.

When I use this code (and the default RabbitMQ installation configuration) everything works nice.

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

But when I add a user to RabbitMQ and try to use the following code (username and password has been changed to protect the innocent. :) )

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

the connectionFactory.CreateConnection() method throws the following exception:

BrokerUnreachableException    
None of the specified endpoints were reachable

Checking the RabbitMQ logfile I can see it complaining about the credentials:

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

The thing is that I am confident about the username and password and I cannot for the love of coding find a solution to this anywhere.

I must be missing something obvious but I can't figure out what it is. I would be grateful for any helpful pointers.

Answer

user181261 picture user181261 · Feb 14, 2011

It seems that I have found a solution to my own problem. The following code works:

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();

Thanks for listening and perhaps this at least could be useful to someone else. :)