.Net RabbitMQ 客户端是否在 .Net Core 2.0 中工作? AWS Lambda 函数?

Does the .Net RabbitMQ client work in a .Net Core 2.0. AWS Lambda function?

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

异常详细信息

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);

由于某些原因,在 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);