我有一个微服务应用程序,它有两个服务,一个兔子mq用作消息队列,用于它们之间的通信。现在,我想在docker上部署它们。我在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
一个是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.BrokerUnreachableException:无 指定的端点是可达的---> RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败 ---> System.Net.Internals.SocketExceptionFactory + ExtendedSocketException: 没有这样的设备或地址
也许我在HostName
中犯了一个错误,但我不确定如何纠正它。
答案 0 :(得分:2)
有两个问题需要解决:
这两个服务不属于同一网络,因此您需要将rabbitmq
服务添加到webnet
网络或为这两个服务创建新网络
rabbitmq
可能需要一些时间才能完全可用(即收听5672
端口),因此您需要使service1
服务等待{rabbitmq
服务1}}服务;有关此问题,请参阅this question。