我已经使用this 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访问管理控制台,我可以使用默认的用户名和密码(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创建的网络有关。
Refused connection to RabbitMQ when using docker link
其他详细信息
RabbitMQ.Client-> 5.1.2
UPDATE 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:
可以使用网络浏览器访问管理UI
...
请注意,UI和HTTP API端口(通常为15672)不支持AMQP 0-9-1,AMQP 1.0,STOMP或MQTT连接。这些客户端应使用单独的端口。
您的RabbitMQ实例应该公开,并且您的客户端连接到correct ports for AMQP:
5672、5671:由不带TLS和带TLS的AMQP 0-9-1和1.0客户端使用