use*_*652 3 .net rabbitmq .net-core
我在 .NET Core 3.0 应用程序中遇到 RabbitMQ 客户端 v6.2.1 的奇怪问题。许多队列都被完美地消耗,但两个用于发送消息的队列会抛出“无法解析 XXX 的 ip 地址”,即使我指向直接 IP 地址而不是 XXX。它在我的代码示例的最后一行失败。我的 ConnectionFactory 定义有什么问题?我不使用 Ipv6,这是 100% 肯定的:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ConnectionFactory connectionFactory = new ConnectionFactory
{
AutomaticRecoveryEnabled = true,
NetworkRecoveryInterval = new TimeSpan(0, 0, 0, 0, settings.NetworkRecoveryIntervalInMs),
HostName = settings.Host,
TopologyRecoveryEnabled = true,
Ssl = settings.UseSSL ? new SslOption
{
Enabled = true,
Version = System.Security.Authentication.SslProtocols.Tls12,
ServerName = settings.Host,
CertPath = settings.Cert,
CertPassphrase = settings.CertPassphrase,
AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNameMismatch | SslPolicyErrors.RemoteCertificateChainErrors
} : null,
VirtualHost = settings.VirtualHost,
Port = int.Parse(settings.Port),
UserName = settings.UserName,
Password = settings.Password
};
return connectionFactory.CreateConnection(settings.ClientName);
Run Code Online (Sandbox Code Playgroud)
小智 9
不知道您是否解决了这个问题,我最近使用 RabbitMQ 的 Xamarin 应用程序也遇到了同样的问题。它尝试使用 AddressFamily.Unspecified 创建套接字,这是不允许的,它只会崩溃。结果就是这个神秘的“找不到 ip 地址”异常。如果您在使用连接工厂之前设置了默认地址族,那么它就可以正常工作:
ConnectionFactory.DefaultAddressFamily = AddressFamily.InterNetwork;
Run Code Online (Sandbox Code Playgroud)
或者
ConnectionFactory.DefaultAddressFamily = AddressFamily.InterNetworkV6;
Run Code Online (Sandbox Code Playgroud)
当然,您现在只能使用 IPv4 或 IPv6 地址,但这对我来说不是问题(至少现在不是)。
归档时间: |
|
查看次数: |
1629 次 |
最近记录: |