在我的 C# 应用程序中,我有以下代码:
var factory = new ConnectionFactory
{
Port = 5671,
UserName = "userxxxx",
Password = "passwordxxx",
HostName = "amqps://xxxx.mq.us-east-1.amazonaws.com"
};
using var connection = factory.CreateConnection();
但是在 CreateConnection 期间我收到:
RabbitMQ.Client.Exceptions.BrokerUnreachableException
HResult=0x80131620
Message=None of the specified endpoints were reachable
Source=RabbitMQ.Client
AWS 控制台向我展示:
端点:amqps://xxxx.mq.us-east-1.amazonaws.com:5671
我做错了什么?
使用“netcat”等工具验证您可以连接到 AWS MQ 上的端口 5671。 Netcat 应该在您尝试连接的同一主机 上使用。或者,考虑使用基于云的端口扫描仪,例如 https://www.whatismyip.com/port-scanner/ 将您的本地网络排除在外。
netcat 的成功示例:
$ nc -vz myownawsmq.mq.us-east-1.amazonaws.com 5671 连接到 myownawsmq.mq.us-east-1.amazonaws.com 5671 端口 [tcp/amqps] 成功!
如果出现错误或超时,则说明您的 URL 不正确或端口 5671 被阻止。
当我创建 AWS RabbitMQ 实例时,端口 5671 对互联网开放,因为默认情况下可公开访问。您不能将安全组与可公开访问的 RabbitMQ 实例一起使用。如果您为 RabbitMQ 实例设置私有访问,您将无法从外部访问它。
也有可能 5671 被本地防火墙规则阻止。检查本地网络中的防火墙配置以确保允许 5671。如果基于云的端口扫描仪可以连接到该端口,但本地扫描不能连接到该端口,则可能是您的本地网络配置问题。
你必须像这样纠正你的代码
var factory = new ConnectionFactory
{
Uri = new Uri("amqps://xxxx.mq.us-east-1.amazonaws.com"),
Port = 5671,
VirtualHost = "/",
UserName = "userxxxx",
Password = "passwordxxx"
};
using var connection = factory.CreateConnection();