我正在使用AWS ECS在socket.io的帮助下运行用nodejs编写的聊天应用程序。
我使用AWS Application Load Balancer作为前端,并创建了一个目标组,该目标组包含AWS ECS服务。
现在,假设我用容器(使用任务定义)创建了1个服务,并将其添加到目标组中,并且用户开始使用websocket连接到我的AWS ECS服务。
我的问题是,如果我使用新的任务定义更新服务,AWS ECS会等待旧的websocket连接正常断开连接还是会强制断开旧的websocket连接与旧服务的连接?
答案 0 :(得分:1)
您的Websocket连接对于ECS来说是超出范围的活动-它对此没有可见性。因此ECS不会在这里为您提供帮助,但是...
更新服务时,它等同于发送(you query) t1
having 30 = (select count(*) from GUEST where idlocation=t1.idlocation and year=t1.year, week_number=t1.week_number)
命令。这意味着发送了stop signal。
在任务上调用StopTask时,相当于docker stop是 发出给在任务中运行的容器。这导致 SIGTERM和默认的30秒超时,然后发送SIGKILL 并且容器被强制停止。如果容器处理 SIGTERM正常运行,并在收到信号后30秒内退出,否 SIGKILL已发送。
您应该能够在to set a trap中使用entrypoint script来执行某种优雅的切换过程。
所以类似:
docker stop
有关容器化#!/bin/bash
... other code...
function handleShutdownFoo {
# do something...
}
trap handleShutdownFoo SIGTERM
... more code ...
应用review this guide from the Node team的更多信息。