【问题标题】:Cannot connect to RabbitMQ Server from another containerised .Net core RabbitMQ client无法从另一个容器化的 .Net 核心 RabbitMQ 客户端连接到 RabbitMQ 服务器
【发布时间】:2020-08-18 01:45:34
【问题描述】:

我已经能够设置容器化的 RabbitMQ 服务器,并使用基本的 .NET Core 客户端访问它,并使用 http://localhost:15672/ 上的管理门户检查消息发送和接收工作。

但是,当我将我的 Sender/Receiver .NET Core 客户端容器化时,我真的很沮丧,因为我无法建立连接。我已经建立了一个明确的“shipnetwork”,所以下面的 docker-compose 部署中的所有容器都应该互相看到。

这是我在发送方尝试连接时遇到的错误:

我的 SendRabbit .NET core App 如下。这段代码在我的本地 Windows 10 开发机器上运行,在作为容器运行的 RabbitMQ 服务器上,有一个“localhost”主机。但是当我将其更改为 [linux] docker 项目并将主机设置为“rabbitmq”时,以对应 docker compose 中的服务名称。现在我只是在我的 Sender 容器中收到 Endpoint Connection 错误异常。

我还尝试在 Google Cloud Linux 虚拟机上使用相同的 docker-compose 使用相同的 RabbitMQ 服务器和 Sender Image,并得到相同的错误。所以我不认为这是 Windows 10 docker 托管 VM 环境的麻烦。

我以为 docker 会开发和部署微服务,但事实证明设置一个基本的 RabbitMQ 连接真的很痛苦。

我认为可能 rabbitmq 服务器没有启动并运行,所以可能雄心勃勃地放入相同的 docker-compose。但我已经检查过运行我的 SendRabbit 容器 $docker run --network shipnetwork sendrabbit 几分钟后。但我仍然遇到同样的连接错误

【问题讨论】:

    标签: docker docker-compose rabbitmq


    【解决方案1】:

    码头网络 **** 网络!

    当我检查实际的 docker 网络时,我有:


    主持人
    船网
    rabbitship_shipnetwork

    docker compose 实际上是在创建“新”网络:rabbitship_shipnetwork 每次启动时,并将 rabbimq 服务器放置在该网络上。 netwrok 是通过附加目录名称来命名的,名称在 compsos yaml 中。所以我在发件人中使用了错误的网络。所以我应该一直在使用

    $docker run --network rabbitship_shipnetwork sendrabbit

    这工作正常,并在rabbitmq服务器中创建消息

    所以我不觉得 docker-compose 实际上对创建网络很有帮助,因为它对运行它的目录名称很敏感!我不太可能构建一个应用程序 .docker 文件,并从一个目录部署所有应用程序,尤其是当 rabbitmq 必须单独启动时,发送方和接收方才能使用它。

    docker-compose 0

    【讨论】:

    • docker-compose 网络工作得很好 - 它创建的网络以项目名称(默认为目录名称)为前缀,以避免与任何预先存在的网络发生名称冲突。如果您想连接到预先存在的网络,您应该在docker-compose.yml 中将您的网络标记为外部网络。下次仔细阅读文档:docs.docker.com/compose/networking/#use-a-pre-existing-network
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多