【问题标题】:Does the .Net RabbitMQ client work in a .Net Core 2.0. AWS Lambda function?.Net RabbitMQ 客户端是否在 .Net Core 2.0 中工作。 AWS Lambda 函数?
【发布时间】:2026-01-29 02:25:01
【问题描述】:

我无法在 AWS Lambda 中打开与 RabbitMQ 集群的连接。我可以使用 IIS 中托管的 .Net 标准库很好地连接到集群。在 AWS Lambda 中托管时,我得到一个带有 SocketException 的 InnerException 和 ErrorCode -1 的 BrokerUnreachableException。

异常详情

RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable ---> System.Net.Sockets.SocketException: Unknown error -1
   at RabbitMQ.Client.EndpointResolverExtensions.SelectOne[T](IEndpointResolver resolver, Func`2 selector)
   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)
   --- End of inner exception stack trace ---
   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)
   at PeopleGateway.Controllers.SalesforcePersonaNotificationsController.<GetAmpqBdsAsync>d__3.MoveNext()

VPC 已配置,我可以在 Lambda 函数中打开到相同主机和端口的套接字,但无法使用 RabbitMQ 客户端。

当使用 IIS Express 在本地运行相同的代码时,连接可以正常打开。

示例代码

   var cf = new ConnectionFactory();
   cf.Password = "password";
   cf.UserName = "username";
   cf.Port = 5672;
   string[] allHosts = new string[] { "hostname1.domain.com", "hostname2.domain.com" };
   var endpoints = allHosts.Select(h => new AmqpTcpEndpoint(h, cf.Port)).ToList();
   var conn = cf.CreateConnection(endpoints);

【问题讨论】:

    标签: amazon-web-services rabbitmq aws-lambda .net-standard


    【解决方案1】:

    由于某种原因,在 Lambda 中运行时需要设置 AddressFamily:

    var cf = new ConnectionFactory();
    cf.Password = "password";
    cf.UserName = "username";
    cf.Port = 5672;
    string[] allHosts = new string[] { "hostname1.domain.com","hostname2.domain.com" };
    var endpoints = allHosts.Select(h => new AmqpTcpEndpoint(h, cf.Port)
                    { AddressFamily = AddressFamily.InterNetwork }).ToList();
       var conn = cf.CreateConnection(endpoints);
    

    【讨论】: