Я пытаюсь реализовать плавное завершение работы в нашем приложении Spring Boot 2, чтобы удалить ошибки 5xx при уменьшении масштаба модулей.
Я установил
management:
endpoints:
jmx:
exposure:
include: "*"
web:
exposure:
include: "*"
endpoint:
shutdown:
enabled: true
server.shutdown: graceful
внутри моего файла application.yaml, и я использую конечную точку /actuator/health в качестве проверки работоспособности и готовности внутри моего файла Deployment.yaml .
Я установил период ожидания в 50 секунд внутри preStopHook, а мой terminationGracePeriod — 120 секунд.
Мой файл Deployment.yamllifecycle:
preStop:
exec:
command: ["/bin/sh","-c","sleep 50;","rm -rf /mnt/bixby/log/$HOSTNAME"]
terminationGracePeriod: 120
livenessProbe:
httpGet:
port: 8080
path: /actuator/health
initialDelaySeconds: 45
periodSeconds: 5
readinessProbe:
httpGet:
port: 8080
path: /actuator/health
initialDelaySeconds: 45
periodSeconds: 5
Странно то, что эта штука работает в одной среде (назовем ее dev1), но не работает в другой (dev2).
Когда я удаляю модуль, и когда я отправляю запрос на завивку в конечную точку /actuator/health, он возвращает {"status":"DOWN","groups":["liveness","readiness"] в dev1, но это не так t возвращает любой ответ в среде dev2. Я получаю следующий результат: (52) Пустой ответ от сервера через 50 секунд, что также является временем сна моего prestopHook . И, как ни странно, наша собственная конечная точка проверки работоспособности, которую мы использовали ранее, возвращает правильный ответ в течение этого периода.
После этого, если я снова сделаю запрос на завивку, я получу следующий результат:
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /actuator/health HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 503 Service Unavailable
< Connection: keep-alive
< Content-Length: 0
Также странно, что в среде dev1, где плавное завершение работы, кажется, работает правильно, модуль завершается через 50 секунд, что странно, поскольку terminationGracePeriod составляет 120 секунд.
У меня есть добавил следующий код предварительного уничтожения в мое приложение весенней загрузки
@PreDestroy
public void tearDown() {
logger.log("Application shutting down");
}
Все конфигурации, образ Docker приложения Spring Boot, версия Kubernetes в обоих окружениях одинаковы.
Я также добавил эту конфигурацию чванства для привода работать вместе с чванством
@Bean // This bean is required when you want swagger and actuator to work together
public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
return new BeanPostProcessor() {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
if (bean instanceof WebMvcRequestHandlerProvider
|| bean instanceof RequestHandlerProvider) {
customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
}
return bean;
}
private void customizeSpringfoxHandlerMappings(
List mappings) {
List copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null)
.collect(Collectors.toList());
mappings.clear();
mappings.addAll(copy);
}
@SuppressWarnings("unchecked")
private List getHandlerMappings(Object bean) {
try {
Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
field.setAccessible(true);
return (List) field.get(bean);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
};
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ning-in-ku
Попытка реализовать плавное завершение работы приложения Spring Boot 2, работающего в Kubernetes ⇐ JAVA
Программисты JAVA общаются здесь
1727438215
Anonymous
Я пытаюсь реализовать плавное завершение работы в нашем приложении Spring Boot 2, чтобы удалить ошибки 5xx при уменьшении масштаба модулей.
Я установил
management:
endpoints:
jmx:
exposure:
include: "*"
web:
exposure:
include: "*"
endpoint:
shutdown:
enabled: true
server.shutdown: graceful
внутри моего файла application.yaml, и я использую конечную точку /actuator/health в качестве проверки работоспособности и готовности внутри моего файла Deployment.yaml .
Я установил период ожидания в 50 секунд внутри preStopHook, а мой terminationGracePeriod — 120 секунд.
Мой файл Deployment.yamllifecycle:
preStop:
exec:
command: ["/bin/sh","-c","sleep 50;","rm -rf /mnt/bixby/log/$HOSTNAME"]
terminationGracePeriod: 120
livenessProbe:
httpGet:
port: 8080
path: /actuator/health
initialDelaySeconds: 45
periodSeconds: 5
readinessProbe:
httpGet:
port: 8080
path: /actuator/health
initialDelaySeconds: 45
periodSeconds: 5
Странно то, что эта штука работает в одной среде (назовем ее dev1), но не работает в другой (dev2).
Когда я удаляю модуль, и когда я отправляю запрос на завивку в конечную точку /actuator/health, он возвращает {"status":"DOWN","groups":["liveness","readiness"] в dev1, но это не так t возвращает любой ответ в среде dev2. Я получаю следующий результат: (52) Пустой ответ от сервера через 50 секунд, что также является временем сна моего prestopHook . И, как ни странно, наша собственная конечная точка проверки работоспособности, которую мы использовали ранее, возвращает правильный ответ в течение этого периода.
После этого, если я снова сделаю запрос на завивку, я получу следующий результат:
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /actuator/health HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 503 Service Unavailable
< Connection: keep-alive
< Content-Length: 0
Также странно, что в среде dev1, где плавное завершение работы, кажется, работает правильно, модуль завершается через 50 секунд, что странно, поскольку terminationGracePeriod составляет 120 секунд.
У меня есть добавил следующий код предварительного уничтожения в мое приложение весенней загрузки
@PreDestroy
public void tearDown() {
logger.log("Application shutting down");
}
Все конфигурации, образ Docker приложения Spring Boot, версия Kubernetes в обоих окружениях одинаковы.
Я также добавил эту конфигурацию чванства для привода работать вместе с чванством
@Bean // This bean is required when you want swagger and actuator to work together
public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
return new BeanPostProcessor() {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
if (bean instanceof WebMvcRequestHandlerProvider
|| bean instanceof RequestHandlerProvider) {
customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
}
return bean;
}
private void customizeSpringfoxHandlerMappings(
List mappings) {
List copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null)
.collect(Collectors.toList());
mappings.clear();
mappings.addAll(copy);
}
@SuppressWarnings("unchecked")
private List getHandlerMappings(Object bean) {
try {
Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
field.setAccessible(true);
return (List) field.get(bean);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
};
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79030658/trying-to-implement-graceful-shutdown-in-spring-boot-2-application-running-in-ku[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия