我正在编写一个 Spring Boot 应用程序,它使用 Spring Cloud AWS 。当我开始包含 Spring Cloud AWS bean 时,我注意到 Spring 应用程序上下文的加载速度大幅减慢。以前,上下文会在几秒钟内启动,但现在需要大约 3 - 5 分钟!
我已将速度减慢的原因之一追溯到 AmazonEc2InstanceDataPropertySource
中的 getProperty()
方法。它会多次尝试访问链接本地 IP 地址 (169.254.169.254),在 Amazon 网络内运行应用程序时可以访问该地址,但无法从外部访问该地址。看来,当在亚马逊网络之外运行时,代码只是等待所有连接尝试失败,我猜这是在套接字最终超时时发生的?
我的第一个想法是这个超时可能是可配置的,或者我可以配置一个配置文件以确保在本地运行时不会发生这种情况,但我在文档( http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html )中找不到任何内容完全提到了这一点。
感谢这里的任何智慧,谢谢!
最佳答案
查看类似问题https://github.com/aws/aws-sdk-java/issues/450
我意识到,对于我的本地环境(Windows 7),唯一的方法是在链接本地地址 169.254.169.254 上定义防火墙(快速失败)。 还没有找到为什么我的 windows7 与具有相同应用程序的 Mac/win8 表现不同(如此慢)的具体原因。
无论如何,在使用本地开发环境(EC2 外部)时,我还没有找到任何全局标志来禁用与 ec2-instance-metadata 的通信。
cloud.aws.stack.auto=false 有一点帮助,但这还不够,因此我设置了防火墙
关于amazon-web-services - AmazonEc2InstanceDataPropertySource.getProperty() 在 Amazon 外部运行时速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847102/