我已经使用这个docker映像在我的开发机器上设置了RabbitMQ服务器。
我已经使用以下命令来设置我的容器
docker run -d --name my-rabbit -p 5672:15672 rabbitmq:3-management
下面是docker ps命令输出
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我可以使用默认用户名和密码(访客/访客(登录
下面是我的.Net核心代码
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创建的网络有关。
使用docker链接时拒绝连接到RabbitMQ
的其他详细信息
- .Net Core 3.1应用程序
RabbitMQ.客户端->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客户端指向管理端口时,它失败了,因为它不受支持:
可以使用Web浏览器访问管理UI
请注意,UI和HTTP API端口(通常为15672(不支持AMQP 0-9-1、AMQP 1.0、STOMP或MQTT连接。这些客户端应该使用单独的端口。
您的RabbitMQ实例应该公开并连接到AMQP:的正确端口
5672、5671:由不带和带TLS 的AMQP 0-9-1和1.0客户端使用