Наша команда поддерживает большое количество архитектурно схожих сервисов SpringBoot. В основном они используют SpringBoot 3.2.5. Мы настраиваем исполнительный механизм «здоровья» для использования в нашем кластере Kubernetes, чтобы убедиться, что служба по-прежнему работоспособна.
Я смотрю на одну службу, которая по какой-то причине получает ошибку 404. при попытке достичь этого URL-адреса. Я сравниваю его с другим сервисом, у которого нет этой проблемы. У меня есть точки останова, установленные в коде пользовательского приложения, который внутренне вызывает исполнительный механизм, а также в коде org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(), который обрабатывает этот вызов исполнительного механизма. Я могу запустить класс Application в «хорошем» сервисе, и он корректно перейдет в обработчик. Я могу запустить класс приложения в «плохой» службе, и он завершается с ошибкой 404 при этом вызове.
Я проверил файлы application.properties в обеих службах. Я отсортировал их оба и сосредоточился на всех свойствах, начиная с управления. Они идентичны.
Я распечатал содержимое толстого jar-файла для каждой службы, сосредоточив внимание на файлах в BOOT-INF/lib. Они определенно разные, потому что делают несколько разные вещи, но ни одно из различий не связано с артефактами Spring.
Я проверил с помощью точек останова, что вызов `/actuator/health' вызывает плохой сервис попадает в сервис, но не находит для него обработчика и возвращает 404.
Я вошел в org.springframework.boot.actuate.autoconfigure.health .HealthEndpointWebExtensionConfiguration.getHealthEndpoint(WebEndpointsSupplier) как с хорошим, так и с плохим сервисом, и я вижу конечную точку работоспособности в списке, и она ее находит. Я не вижу явных различий в данных между плохим сервисом и хорошим сервисом.
На что еще я могу посмотреть, чтобы определить, почему этот обработчик либо неправильно зарегистрирован, либо каким-то образом зарегистрированы с неверным путем?
Обновить:
Чтобы ответить на некоторые вопросы в комментариях:
Я не устанавливал ни server.port, ни Management.server.port в «плохом» сервисе, хотя я устанавливал server.port в «хороший» сервис (до 8080). В качестве эксперимента я попробовал установить «8090» и сделать запрос на 8080, результаты оказались разными. Без изменения порта "curl -v http://..." сообщает об этом:
* Connected to localhost (::1) port 8080
> GET /msapi/actuator HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/8.9.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 404
< Content-Length: 0
< Date: Wed, 23 Oct 2024 14:43:06 GMT
<
* Connection #0 to host localhost left intact
Однако, если я изменю свойства порта на 8090, он сообщит следующее:
* Trying [::1]:8080...
* Trying 127.0.0.1:8080...
* connect to ::1 port 8080 from :: port 64398 failed: Connection refused
* connect to 127.0.0.1 port 8080 from 0.0.0.0 port 64399 failed: Connection refused
* Failed to connect to localhost port 8080 after 2269 ms: Could not connect to server
* closing connection #0
curl: (7) Failed to connect to localhost port 8080 after 2269 ms: Could not connect to server
Когда я попытался сделать запрос только к /actuator, он получил ту же ошибку, что и `/actuator/health'.
Хотя мы развертываем эти службы в кластерах k8s, я провожу тестирование этой проблемы, просто запуская ее на своем рабочем столе, поэтому взаимодействия с k8s не происходит.
SPRING_APPLICATION_JSON нигде не установлен.
Я бы включил полные файлы pom.xml и application.properties, но мне придется исключить некоторые из них, в основном потому, что это перешло бы ограничение размера публикации. Я постараюсь удалить только ненужное.
pom.xml:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0
com.att.idp
sdk-java-parent
2.9.0
com.att.idp.dpl
DPLServiceQualificationMs
0.0.4-SNAPSHOT
${userId}
src/test/groovy
3.7.1
1.6.6
3.0.0-M7
com-att-idp-dpl
UTF-8
**/**/Application.*,
**/**/config/*.*,
**/**/exception/*.*,
**/**/message/*.*,
**/**/model/*.*,
**/com/att/idp/dpl/kafka/producer/CreateMessage.java,
**/com/att/idp/dpl/kafka/producer/Message.java,
**/com/att/idp/dpl/kafka/producer/MessageContext.java,
**/com/att/idp/dpl/kafka/producer/NotifyMeKafkaProducerConfig.java,
**/com/att/idp/dpl/kafka/producer/NotifymeMessage.java,
**/com/att/idp/dpl/db/Errors/ServiceQualMessageHandlerErrors.java,
**/com/att/idp/dpl/service/ParallelExecutionService.java,
**/**/model/swagger/*.*
${basedir}/target/jacoco-it.exec
4.5.4
dockercentral.it.att.com:5100
dplservicequalificationms
2.0.0-SNAPSHOT
17
ajsc-svc-account
2.0.0-SNAPSHOT
com.att.idp
${basedir}/target/jacoco-ut.exec
3.4.14
${basedir}/target/classes/META-INF/resources/swagger
1.18.32
org.spockframework
spock-bom
2.4-M1-groovy-4.0
pom
import
com.att.idp
idp-shutdown-jersey
com.att.idp
idp-shutdown-actuator
com.google.guava
failureaccess
1.0.1
edu.emory.mathcs.backport
com.springsource.edu.emory.mathcs.backport
3.1.0
com.att.idp
rest-api-client
com.att.idp
idp-spring-boot-autoconfigure
com.att.idp
idp-health
com.att.idp
idp-spring-boot-autoconfigure
com.att.idp
soap-api-client
org.drools
drools-core
7.18.0.Final
org.kie
kie-spring
7.18.0.Final
org.projectlombok
lombok
${lombok.version}
provided
org.springframework.data
spring-data-redis
com.att.idp
api-inbound-logging-interceptor
xml-apis
xml-apis
redis.clients
jedis
com.att.idp
idp-spring-boot-autoconfigure
3.7.545-SNAPSHOT
com.att.aft
dme2
3.3.1
org.apache.groovy
groovy-templates
4.0.21
io.projectreactor
reactor-core
org.springframework.boot
spring-boot-starter-data-mongodb
jakarta.xml.bind
jakarta.xml.bind-api
4.0.2
org.apache.httpcomponents
httpclient
4.5.14
compile
io.reactivex.rxjava2
rxjava
io.opentelemetry.instrumentation
opentelemetry-rxjava-2.0
1.31.0-alpha
src/main/resources
**/*
DPLServiceQualificationMs
org.apache.maven.plugins
maven-compiler-plugin
groovy-eclipse-compiler
lombok.launch.Agent
true
org.projectlombok
lombok
${lombok.version}
kr.motd.maven
os-maven-plugin
1.5.0.Final
initialize
detect
Подробнее здесь: https://stackoverflow.com/questions/791 ... ilar-servi
Почему одна служба не обрабатывает /actuator/health, а другая очень похожая служба? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему одна служба не обрабатывает /actuator/health, а другая очень похожая служба?
Anonymous » » в форуме JAVA - 0 Ответы
- 36 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему одна служба не обрабатывает /actuator/health, а другая очень похожая служба?
Anonymous » » в форуме JAVA - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему одна служба не обрабатывает /actuator/health, а другая очень похожая служба?
Anonymous » » в форуме JAVA - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему одна служба не обрабатывает /actuator/health, а другая очень похожая служба?
Anonymous » » в форуме JAVA - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему одна служба не обрабатывает /actuator/health, а другая очень похожая служба?
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-