Asp.net core 使用docker链接时拒绝连接到RabbitMQ
我有一个microservices应用程序,它有两个服务和一个rabbitmq,用作它们之间通信的消息队列。现在,我想在docker上部署它们。我在Asp.net core 使用docker链接时拒绝连接到RabbitMQ,asp.net-core,rabbitmq,docker-compose,microservices,Asp.net Core,Rabbitmq,Docker Compose,Microservices,我有一个microservices应用程序,它有两个服务和一个rabbitmq,用作它们之间通信的消息队列。现在,我想在docker上部署它们。我在docker compose.yml文件中有以下代码: 版本:“3” 服务: rabbitmq: build: ./Rabbit hostname: "rabbitmq" container_name: "rabbitmq" environment: RABBITMQ_ERLANG_COOKIE: "c
docker compose.yml
文件中有以下代码:
版本:“3”
服务:
rabbitmq:
build: ./Rabbit
hostname: "rabbitmq"
container_name: "rabbitmq"
environment:
RABBITMQ_ERLANG_COOKIE: "cookie"
RABBITMQ_DEFAULT_USER: "user"
RABBITMQ_DEFAULT_PASS: "pass"
RABBITMQ_DEFAULT_VHOST: "/"
ports:
- "15672:15672"
- "5672:5672"
# labels:
# NAME: "rabbit1"
volumes:
- "/opt/rabbitmq:/var/lib/rabbitmq"
service1:
build: ./service1
deploy:
replicas: 5
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
ports:
- "8181:80"
depends_on:
- rabbitmq
links:
- rabbitmq
networks:
- webnet
因此,这里我在一个容器中构建RabbitMQ映像,然后将该容器链接到service1
的容器。由于service1
one是一个ASP.NET核心Web API,因此我使用以下设置连接到消息队列:
//Establish the connection
var factory = new ConnectionFactory
{
HostName = "rabbitmq",
Port = 5672,
UserName = "user",
Password = "pass",
VirtualHost = "/",
AutomaticRecoveryEnabled = true,
NetworkRecoveryInterval = TimeSpan.FromSeconds(15)
};
但当我尝试运行docker compose up
时,我收到以下错误消息:
未处理的异常:
RabbitMQ.Client.Exceptions.BrokerRunReachableException:没有
指定的端点是可访问的--->
RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败
--->System.Net.Internals.SocketException工厂+ExtendedSocketException:
没有这样的设备或地址
可能我的主机名有错误,但我不确定如何更正。有两个问题需要解决:
rabbitmq
服务添加到webnet
网络,或者为这两个服务创建一个新网络rabbitmq
可能需要一些时间才能完全可用(即收听5672
端口),因此您需要使service1
服务等待rabbitmq
服务;关于这个问题,请参见他们不在同一个网络上,将
网络:-webnet
放到rabbitmq
服务,或者为他们两个创建另一个网络我尝试了这个,但仍然不起作用,但异常是以下未处理的异常:RabbitMQ.Client.Exceptions.BrokerRunReachableException:指定的终结点均不可访问---->RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败---->System.Net.Internals.SocketExceptionFactory+ExtendedSocketException:连接被拒绝172.21.0.3:5672
我们正在取得进展,至少主机名现在已解决。请重新启动docker并重试。看来执行顺序是问题所在。我认为这篇文章是一个可能的解决方案。