我在AWS支持论坛上发布了此消息但尚未收到回复,所以希望您有个想法......
我们有一个自动扩展组,可根据当前负载启动或终止实例。在我目前的EC2实例中,我希望能够检测到它即将关闭并完成我的工作。
更详细地描述情况。我们有一个自动缩放组,每个实例都从一个SQS中读取内容。每个实例将运行多个线程,每个线程从同一个SQS队列读取并根据需要处理数据。
我需要知道这个实例何时会关闭,所以我可以阻止新线程读取数据,并阻止关闭直到剩余数据处理完毕。
我不确定如何在Java SDK中执行此操作,并且我担心如果没有正确处理数据,我的实例将被终止。
由于 利
答案 0 :(得分:0)
如果要缩小规模,AWS Auto Scaling将在不发出警告的情况下终止您的EC2实例。
在终止之前,没有办法允许任何队列工作人员流失。
如果您的工作人员正在以事务方式处理消息,并且您没有在成功处理消息之前从SQS中删除消息,那么这应该不是问题。当实例终止时,处理将停止,并且事务不会提交。该消息不会从SQS队列中删除,并且可以在以后由其他工作人员接收和处理。
它支持的唯一排放行为是从ELB中排除HTTP连接:"If connection draining is enabled for your load balancer, Auto Scaling waits for the in-flight requests to complete or for the maximum timeout to expire, whichever comes first, before terminating instances".