适用于nacos作为注册中心

1、暴露以下接口

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/actuator")
public class GracefulShutdownController {

	private final NacosServiceManager nacosServiceManager;

	@GetMapping("graceful_shutdown")
	public R shutdown() throws NacosException {

		nacosServiceManager.nacosServiceShutDown();

		log.info("nacos客户端已关闭");
		return R.ok();
	}
}

2、在服务器执行命令

# 你的容器名称
CONTAINER_NAME=web-app
# 获取容器id
PREVIOUS_CONTAINER=$(docker ps --format "table {{.ID}}  {{.Names}}  {{.CreatedAt}}" | grep $CONTAINER_NAME | awk -F  "  " '{print $1}')
echo " 开始构建新容器"
docker-compose -f ../crm-compose.yml up --build -d --no-deps --scale $CONTAINER_NAME=2 --no-recreate $CONTAINER_NAME
# 容器内执行优雅关闭
docker exec -it $PREVIOUS_CONTAINER curl -X GET http://localhost:4100/actuator/graceful_shutdown
sleep 60
echo "启动成功, 正在移除副本"
docker kill -s SIGTERM $PREVIOUS_CONTAINER
sleep 1
docker rm -f $PREVIOUS_CONTAINER
docker-compose -f ../crm-compose.yml up -d --no-deps --scale $CONTAINER_NAME=1 --no-recreate $CONTAINER_NAME
echo "done!"

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐