从未收到 RabbitMQ connection.start,可能是由于网络超时 .net Web App

RabbitMQ connection.start was never received, likely due to a network timeout .net Web App

我正在尝试让 .Net 4.7.2 Web 应用程序连接到 (Windows) Docker 容器中的 RabbitMQ 服务器 运行(与网络应用程序在 运行 中)。

更新:使用非 Docker 版本的 RabbitMQ 也不能解决问题。控制台连接到非Docker RabbitMQ并可以发布消息,但.Net 4.7.2 web应用程序仍然失败。

我正在使用具有以下连接代码的 RabbitMQ.Client 6.2.4 (VMWare):

ConnectionFactory connectionFactory = new ConnectionFactory();
Uri uri = new Uri("amqp://dan:dan@localhost:5672/");
connectionFactory.Uri = uri;
var theConnection = connectionFactory.CreateConnection();

(注意我也试过同样的结果:

var factory = new ConnectionFactory() { HostName = "localhost", Port = 5672, VirtualHost = "/", UserName = "dan", Password = "dan" };
using (var connection = factory.CreateConnection())
)

用户 dan 以管理员身份存在并有权访问虚拟主机。

我收到以下错误:

{"None of the specified endpoints were reachable"}
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146232800
HelpLink: null
InnerException: {"connection.start was never received, likely due to a network timeout"}
Message: "None of the specified endpoints were reachable"
Source: "RabbitMQ.Client"
StackTrace: "   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)\r\n   at XXXX.Common.BackgroundSubmit.SubmitBackgroundProcess.<>c.<SubmitJob>b__0_0(String connectionURI) in C:\XXXX.Common\BackgroundSubmit\BackgroundSubmitProcess.cs:line 71"
TargetSite: {RabbitMQ.Client.IConnection CreateConnection(RabbitMQ.Client.IEndpointResolver, System.String)}

RabbitMQ 日志报告此 activity:

2022-05-18 02:18:59.346295+00:00 [info] <0.1164.0> accepting AMQP connection <0.1164.0> (172.19.0.1:55538 -> 172.19.0.2:5672)
2022-05-18 02:18:59.443173+00:00 [warning] <0.1164.0> closing AMQP connection <0.1164.0> (172.19.0.1:55538 -> 172.19.0.2:5672):
2022-05-18 02:18:59.443173+00:00 [warning] <0.1164.0> client unexpectedly closed TCP connection

我创建了一个小型控制台应用程序,该应用程序工作正常 - 它可以连接(并随后向队列生成消息)。此控制台应用程序是 .NET 6.0。

我已经尝试使用我机器的实际 IP 地址以及 127.0.0.1 并且控制台可以连接,但网络应用程序没有。

我看了好几张票,觉得这可能是个好线索:


这表示确保 System.Threading.Tasks.Extension、System.Threading.Channels 和 System.Memory 在所有引用的项目中都是相同的版本,它们是。

还尝试使用 rabbitmq_localdev 作为 URI 中的兔子主机名。

如有任何建议,我们将不胜感激!

谢谢,

D

这里是 docker-compose .yaml 如果有帮助的话:

version: "3.2"
services:
  rabbitmq:
    image: rabbitmq:3-management-alpine
    container_name: 'rabbitmq'
    ports:
        - 5672:5672
        - 15672:15672
      # Expose 15672 for the management console, localhost:15672, guest/guest
      # Expose 5672 for the qmpq port
      
      # 
    hostname: rabbitmq_localdev
    volumes:
        - ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/
        - ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
    networks:
        - rabbitmq_go_net

networks:
  rabbitmq_go_net:
    driver: bridge

对于以后登陆这里的人,我能够解决这个问题。

我的解决方案有多个项目。具有 RabbitMQ 连接功能的 MVC 项目具有 RabbitMQ.Client 作为 NuGet 包,但另一个项目没有。我通过 NuGet 添加 RabbitMQ.Client 到另一个项目,它解决了问题。