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

问题描述 投票:0回答:3

我正在尝试让 .Net 4.7.2 Web 应用程序连接到在 (Windows) Docker 容器中运行的 RabbitMQ 服务器(与运行 Web 应用程序的计算机在同一台计算机上)。

更新:使用非 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 日志报告此活动:

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,控制台已连接,但 Web 应用程序未连接。

我看了几张票,想也许这是一个很好的线索:

https://stackoverflow.com/questions/68011963/factory-createconnection-generates-a-none-of-the-specified-endpoints-were-reac

这表示确保 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
      
      # https://stackoverflow.com/questions/30747469/how-to-add-initial-users-when-starting-a-rabbitmq-docker-container
    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
.net docker rabbitmq
3个回答
3
投票

对于那些将来登陆这里的人,我能够解决这个问题。

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


3
投票

我将重新表述已接受的答案。

如果您在

library 项目
中有 RabbitMQ 客户端,请将
RabbitMQ.Client
Nuget 包的引用也添加到主项目的根目录(MVC 项目、作业、WCF 服务等)。这将解决问题。


0
投票
我在使用 WebApi 4.7.2 应用程序时遇到了同样的问题。在花了很多时间尝试解决这个问题之后,对我有用的是将“System.Runtime.CompilerServices.Unsafe”包从版本 6.0.0 降级到 4.5.3。

© www.soinside.com 2019 - 2024. All rights reserved.