.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);
我无法在 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);