Docker - RabbitMQ.Client.Exceptions.BrokerUnreachableException: 'None of the specified endpoints were reachable'
Docker - RabbitMQ.Client.Exceptions.BrokerUnreachableException: 'None of the specified endpoints were reachable'
我已经使用 this docker 图像在我的开发机器上设置了 RabbitMQ 服务器。
我使用下面的命令来设置我的容器
docker run -d --name my-rabbit -p 5672:15672 rabbitmq:3-management
下面是dockerps命令输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a40704b7f3a4 rabbitmq:3-management "docker-entrypoint.s…" 13 minutes ago Up 12 minutes 4369/tcp, 5671-5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5672->15672/tcp my-rabbit
可在 http://localhost:5672 访问管理控制台,我可以使用默认用户名和密码 ( guest/guest )
登录
下面是我的 .Net Core 代码
public RabbitMQMnager()
{
var factory = new ConnectionFactory();
factory.Port = 5672;
Uri uri = new Uri("amqp://guest:guest@localhost:5672/");
var connection = factory.CreateConnection();
//Below are values of different connection string parameters
factory.HostName = "localhost";
factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";
factory.Port = 5672;
var channel = connection.CreateModel(); //<- Exception here
}
执行上述代码后,出现以下异常。
RabbitMQ.Client.Exceptions.BrokerUnreachableException: 'None of the specified endpoints were reachable'
堆栈跟踪
This exception was originally thrown at this call stack:
RabbitMQ.Client.Framing.Impl.Connection.StartAndTune()
RabbitMQ.Client.Framing.Impl.Connection.Open(bool)
RabbitMQ.Client.Framing.Impl.Connection.Connection(RabbitMQ.Client.IConnectionFactory, bool,
RabbitMQ.Client.Impl.IFrameHandler, string)
RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(RabbitMQ.Client.Impl.IFrameHandler)
RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(RabbitMQ.Client.IEndpointResolver)
RabbitMQ.Client.ConnectionFactory.CreateConnection(RabbitMQ.Client.IEndpointResolver, string)
我发现了类似的问题,但提到的解决方案对我来说还不够。看起来它与 docker 和 docker.
创建的网络有关
其他详情
- .Net Core 3.1 应用程序
RabbitMQ.Client -> 5.1.2
更新 1
根据@ThisIsNoZaku 的回答,公开额外的端口解决了我的问题。
docker run -d --hostname my-rabbit --name my-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
用于使用 AMQP 客户端连接到 RabbitMQ 实例并连接到管理控制台的端口 UI(容器中的 15762
,您已将其映射到 5762
在主机上)是不同的。当应用程序尝试将 AMQP 客户端指向管理端口时,失败 because it's not supported:
The management UI can be accessed using a Web browser
...
Note that the UI and HTTP API port — typically 15672 — does not support AMQP 0-9-1, AMQP 1.0, STOMP or MQTT connections. Separate ports should be used by those clients.
您的 RabbitMQ 实例应该公开,并且您的客户端连接到 correct ports for AMQP:
5672, 5671: used by AMQP 0-9-1 and 1.0 clients without and with TLS
我已经使用 this docker 图像在我的开发机器上设置了 RabbitMQ 服务器。
我使用下面的命令来设置我的容器
docker run -d --name my-rabbit -p 5672:15672 rabbitmq:3-management
下面是dockerps命令输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a40704b7f3a4 rabbitmq:3-management "docker-entrypoint.s…" 13 minutes ago Up 12 minutes 4369/tcp, 5671-5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5672->15672/tcp my-rabbit
可在 http://localhost:5672 访问管理控制台,我可以使用默认用户名和密码 ( guest/guest )
登录下面是我的 .Net Core 代码
public RabbitMQMnager()
{
var factory = new ConnectionFactory();
factory.Port = 5672;
Uri uri = new Uri("amqp://guest:guest@localhost:5672/");
var connection = factory.CreateConnection();
//Below are values of different connection string parameters
factory.HostName = "localhost";
factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";
factory.Port = 5672;
var channel = connection.CreateModel(); //<- Exception here
}
执行上述代码后,出现以下异常。
RabbitMQ.Client.Exceptions.BrokerUnreachableException: 'None of the specified endpoints were reachable'
堆栈跟踪
This exception was originally thrown at this call stack:
RabbitMQ.Client.Framing.Impl.Connection.StartAndTune()
RabbitMQ.Client.Framing.Impl.Connection.Open(bool)
RabbitMQ.Client.Framing.Impl.Connection.Connection(RabbitMQ.Client.IConnectionFactory, bool,
RabbitMQ.Client.Impl.IFrameHandler, string)
RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(RabbitMQ.Client.Impl.IFrameHandler)
RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(RabbitMQ.Client.IEndpointResolver)
RabbitMQ.Client.ConnectionFactory.CreateConnection(RabbitMQ.Client.IEndpointResolver, string)
我发现了类似的问题,但提到的解决方案对我来说还不够。看起来它与 docker 和 docker.
创建的网络有关其他详情
- .Net Core 3.1 应用程序
RabbitMQ.Client -> 5.1.2
更新 1
根据@ThisIsNoZaku 的回答,公开额外的端口解决了我的问题。
docker run -d --hostname my-rabbit --name my-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
用于使用 AMQP 客户端连接到 RabbitMQ 实例并连接到管理控制台的端口 UI(容器中的 15762
,您已将其映射到 5762
在主机上)是不同的。当应用程序尝试将 AMQP 客户端指向管理端口时,失败 because it's not supported:
The management UI can be accessed using a Web browser
...
Note that the UI and HTTP API port — typically 15672 — does not support AMQP 0-9-1, AMQP 1.0, STOMP or MQTT connections. Separate ports should be used by those clients.
您的 RabbitMQ 实例应该公开,并且您的客户端连接到 correct ports for AMQP:
5672, 5671: used by AMQP 0-9-1 and 1.0 clients without and with TLS