【问题标题】:How to connect to AWS RabbitMQ from C#?如何从 C# 连接到 AWS RabbitMQ?
【发布时间】:2022-02-15 23:02:25
【问题描述】:

在我的 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

我做错了什么?

【问题讨论】:

  • 您的 C# 应用程序在哪里运行?现场?与rabbitmq相同的VPC?不同的 VPC?
  • 我的 c# 应用正在我的本地 PC 上运行

标签: c# amazon-web-services rabbitmq


【解决方案1】:

使用“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 实例设置 Private Access,您将无法从外部访问它。

也有可能 5671 被本地防火墙规则阻止。检查本地网络中的防火墙配置,确保允许 5671。如果基于云的端口扫描器可以连接到端口,但本地扫描不能,则可能是您的本地网络配置。

【讨论】:

  • 您写的“您不能使用可公开访问的 RabbitMQ 实例的安全组”,即我认为应该是“您不能使用不可公开访问的 RabbitMQ 实例的安全组”?
  • 我已使用 Zenmap 从本地计算机扫描 url 并收到:无法解析“prefix.mq.us-east-1.amazonaws.com:5671”。 AWS RabbitMQ 设置可能有问题,但是什么?
  • 截至 2021 年 3 月,AWS 不支持公共 RabbitMQ 代理的安全组。见forums.aws.amazon.com/thread.jspa?threadID=336502。似乎违反直觉,因为公共 RabbitMQ 是您真正需要安全组的地方。
  • Zenmap 扫描失败很可能是因为您的主机名中有端口。尝试“prefix.mq.us-east-1.amazonaws.com”。扫描完成后,检查端口列表并确保 5671 存在。
  • 我已经使用 ZenMap 扫描了没有端口的 url:找到了主机并从我的本地计算机构建了跟踪路由到 AWS。但是:它只找到一个开放的端口:443。我还能做什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多