Работает ли клиент .Net RabbitMQ в .Net Core 2.0. AWS лямбда-функция? - PullRequest
0 голосов
/ 25 апреля 2018

Мне не удается открыть соединение с кластером RabbitMQ в AWS Lambda. Я могу подключиться к кластеру, используя стандартную библиотеку .Net, размещенную в IIS. Я получаю BrokerUnreachableException с InnerException SocketException с ErrorCode -1 при хостинге в AWS Lambda.

Сведения об исключении

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 Client.

При локальном запуске того же кода с использованием 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);

1 Ответ

0 голосов
/ 16 мая 2018

По какой-то причине AddressFamily должен быть установлен при работе в Lambda:

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