所以我当前遇到的问题是,在我能够正确连接到托管在 AWS MQ 上的rabbitMQ 集群之前。将其 IP 可见性更改为私有后,我必须创建一些配置才能从 VPC 外部访问集群。
当前如何访问集群的示例:
mq.example.com -> 公共 VPC 中的负载均衡器(带目标组到集群主机 IP 和 TLS 端口 5671) -> 私有 VPC 中的集群。
我对网络控制台做了同样的事情。现在 Web 控制台工作正常,因此问题不一定是负载平衡或证书问题。然后我检查了问题是否可能出在我编写的代码上,但情况也并非如此,因为有时从它连接的服务内部,但有时却不会。它抛出错误:“套接字在打开握手期间突然关闭”。
我想我相信问题可能出在哪里,但我对如何解决它并没有正确的看法。我认为这个问题与服务在连接到兔子集群之前首先经过负载均衡器这一事实有关。我只是不知道该怎么办,而且 amqplib 上的大多数文档都晦涩难懂。我还没有发现 AWS MQ 和负载均衡器有任何(有记录的)类似问题。
所以我的问题具体是:我如何才能解决有时我的服务在通过负载均衡器时连接到集群但不连接到集群的问题?
很高兴知道:我使用 AWS MQ 作为rabbit,amqplib 用于客户端连接,amqps 作为协议,Web 控制台使用相同的设置,但服务则不然。
对于后来遇到这个问题的人,我找到了解决方案:
创建网络负载均衡器以将流量路由到集群时,您必须为其分配一个目标组。确保不要这样做:不要将端口 5671 (amqps) 和 443 (Web 控制台) 注册到同一目标组。在路由过程中会出现这样的问题。
而是执行以下操作:
在 aws EC2 上创建两个目标组:
TG1:注册:TLS - 443(Web 控制台) TG2:注册:TLS - 5671(amqps)
配置为 IPV4 连接的简单路由和别名的 NLB 需要以下侦听器:
监听器 1:TLS - 443 并将其分配给 TG1 侦听器 2:TLS - 5671 并将其分配给 TG2
这应该确保无论何时连接,您尝试连接到集群的微服务都不会出现混淆。
然后您可以使用您的子域连接到您的 Web 控制台: 例如。 webconsole.example.com
以及您的服务:例如。 amqps://cluster.example.com:5671 作为主机(主机的格式取决于您在客户端使用的库)
终于,我成功解决了这个问题:
有几个镫骨可以解决这个问题 创建一个新用户而不是使用访客用户。
从 RabbitMQ 管理创建用户(最初它对虚拟主机“无访问权限”)
我创建了一个名为 test 的用户。最初“可以访问虚拟主机”被设为无法访问。
单击测试用户。 转到权限 设置权限并设置虚拟主机“/”。在此输入图像描述 不尝试连接。
注意:我这样连接 RUL
MESSAGE_BROKER_URL='amqp://开发者:hellorabbit@localhost:5672/'