RabbitMQ在localhost中工作,但在LAN中抛出BrokerUnreachableException - (.NET Windows环境。)

时间:2015-03-10 09:06:03

标签: .net rabbitmq

我正在尝试在项目中使用RabbitMQ。

我在Win8(64位)PC上安装了RabbitMQ Server rabbitmq-server-3.4.4.exe,其IP为192.168.100.6。

我在RabbitMQ命令提示符中使用rabbitmqctl add_user username password添加了一个用户。

试图收到如下信息 -

ConnectionFactory factory = new ConnectionFactory();
factory.UserName = "skp";
factory.Password = "111";
factory.VirtualHost = "/";
factory.Protocol = Protocols.DefaultProtocol;
factory.HostName = "localhost";
factory.Port = AmqpTcpEndpoint.UseDefaultPort;
        try
        {
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare("hello", false, false, false, null);

                    var consumer = new QueueingBasicConsumer(channel);
                    channel.BasicConsume("hello", true, consumer);

                    Console.WriteLine(" [*] Waiting for messages." +
                                             "To exit press CTRL+C");
                    while (true)
                    {
                        var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();

                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", message);
                    }
                }
            }
        }
        catch (RabbitMQ.Client.Exceptions.BrokerUnreachableException ex)
        {
            Console.WriteLine(ex.Message.ToString());
            Console.WriteLine(ex.Message);

            Console.ReadLine();
        }

当hostname =“localhost”时,它可以正常工作。

但是,如果我尝试从LAN上的其他PC连接并且hostname =“192.168.100.6”,它会抛出BrokerUnreachableException - “没有指定的端点可以访问”

我错过了什么?

更新: 192.168.100.6(RabbitMQ服务器)上的防火墙已关闭。

2 个答案:

答案 0 :(得分:4)

我认为问题在于UserName&密码。 按照this instruction安装并运行RabbitMQ服务器。

然后浏览http://localhost:15672/。这将打开RabbitMQ管理登录页面。添加用户即#34; abc"用密码。添加下面显示的所有标签,即"管理员,管理人员,政策制定者"。

现在将以下代码用于您的客户端 -

       var factory = new ConnectionFactory() { HostName = "192.168.100.6", Password = "123", UserName = "abc" };

        using (var connection = factory.CreateConnection())
        {
            using (var channel = connection.CreateModel())
            {
                channel.QueueDeclare("hello", false, false, false, null);

                var consumer = new QueueingBasicConsumer(channel);
                channel.BasicConsume("hello", true, consumer);

                Console.WriteLine(" [*] Waiting for messages." +
                                         "To exit press CTRL+C");
                while (true)
                {
                    var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();

                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine(" [x] Received {0}", message);
                }
            }
        }

希望,这将解决您的问题。

答案 1 :(得分:0)

检查端口号,我认为默认值为5672,但是我的Rabbitmq实例(使用docker)在5673上运行。要找到Rabbitmq当前正在使用的端口号(在docker中),请单击容器->检查>端口。 / p>

如果使用了错误的端口号-错误消息“ RabbitMQ.Client.Exceptions.BrokerUnreachableException”,内部异常为“ ExtendedSocketException:可能没有连接...”

如果使用了错误的用户名或密码-错误消息“ RabbitMQ.Client.Exceptions.BrokerUnreachableException”,内部异常为“ AuthenticationFailureException:ACCESS_REFUSED”