在Amazon以外运行时,AmazonEc2InstanceDataPropertySource.getProperty()非常慢

时间:2015-06-15 13:58:06

标签: amazon-web-services timeout spring-cloud

我正在编写一个使用Spring Cloud AWS的春季启动应用。我注意到,一旦我开始包含Spring Cloud AWS bean,Spring应用程序上下文的加载速度就会大幅下降。以前上下文会在几秒钟后开始,但现在需要3到5分钟的时间!

我跟踪了getProperty()AmazonEc2InstanceDataPropertySource方法的减速之一。这会多次尝试访问链接本地IP地址(169.254.169.254),在亚马逊网络中运行应用程序时 可以访问,但无法从外部访问。似乎在亚马逊网络外部运行时,代码只是等待所有连接尝试失败,我猜这种情况会在套接字最终超时时发生?

我的第一个想法是这个超时可能是可配置的,或者我可能能够配置一个配置文件以确保在本地运行时不会发生这种情况,但我在文档中找不到任何内容(http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html )提到这一点。

感谢这里的任何智慧,谢谢!

1 个答案:

答案 0 :(得分:2)

查看类似问题https://github.com/aws/aws-sdk-java/issues/450

我意识到,对于我的本地环境(Windows 7),唯一的方法是在链接本地地址169.254.169.254上定义防火墙(快速失败)。 Haven找不到具体原因,为什么我的windows7的行为与使用相同app的Mac / win8不同(如此之慢)。

无论如何,在使用本地开发环境(EC2之外)时,我还没有找到任何禁用与ec2-instance-metadata通信的全局标志。

cloud.aws.stack.auto = false有点帮助,但这还不够,因此我设置了防火墙