【发布时间】:2021-08-16 16:20:34
【问题描述】:
我将 docker compose 与 .net 核心服务 和 RabbitMQ 一起使用。我尝试从不同的服务连接到 rabbitMQ。我看过很多问题,但没有一个有效或有答案。
我知道您不应该使用 'localhost' 来连接其他服务,而是使用您在 docker-compose 文件中提供的名称。
我真的很好奇答案!
我尝试了什么
- 在 docker compose 文件中添加依赖
- 在 docker compose 文件中添加链接
- 添加重启:始终在 docker compose 文件中
- 将连接链接更改为:amqp://guest:guest@rabbitmq:5672
- 将连接链接更改为:amqp://guest:guest@rabbitmq/
- 多次清理和重建解决方案
- 更改了 docker compose 文件中的顺序。 RabbitMQ 现在是 Nr.1,之后是其他服务。
- 添加了容器名称
- 添加了主机名
这是我的 docker compose 文件
version: '3.0'
services:
rabbitmq:
container_name: rabbitmq
hostname: rabbitmq
image: rabbitmq:3-management
ports:
- "7100:15672"
- "7101:5672"
volumes:
- rabbitmq:/rabbitmq
dbPosts:
image: mysql:latest
ports:
- 3307:3306
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: postsdb
volumes:
- dbpostdata:/var/lib/mysql
post-service:
depends_on:
- dbPosts
- rabbitmq
build:
context: .
dockerfile: post-service/Dockerfile
ports:
- "8081:80"
volumes:
dbpostdata:
rabbitmq:
如何建立连接:
if (_connection == null)
{
ConnectionFactory factory = new ConnectionFactory()
{
Uri = new Uri("amqp://guest:guest@rabbitmq:5672"),
AutomaticRecoveryEnabled = true
};
_connection = factory.CreateConnection();
}
但是当我尝试运行 docker-compose up 时,我收到以下错误消息:
Unhandled Exception: RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable ---> RabbitMQ.Client.Exceptions.ConnectFailureException: Connection failed ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No such device or address
【问题讨论】:
-
再次检查:您显示的代码片段是作为
post-service的一部分运行的,而不是来自您主机上的开发环境? -
连接的代码不是来自后期服务。这是一个不同的“项目”,一个名为“共享”的类库。我添加了从 post-service 到类库的引用。在后期服务中,我在启动时有这段代码:
services.AddMessagePublishing("PostService");。从那以后,我认为它会建立联系
标签: c# .net docker docker-compose rabbitmq