Springboot 管理服务器无法从客户端获取更新,它说 [没有观察到任何项目或终端信号]

问题描述

我正在尝试使用 spring-boot-admin 服务器监控我的 spring-boot 应用程序,但它说所有实例都已关闭

Admin Server page

管理服务器 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.solution</groupId>
    <artifactId>adminServer</artifactId>
    <version>1.0.0</version>
    <name>adminServer</name>
    <description>Admin server for Solution Portal</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-boot-admin.version>2.3.1</spring-boot-admin.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-dependencies</artifactId>
                <version>${spring-boot-admin.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

管理服务器application.properties

server.port = 3031

spring.boot.admin.server.url = http://localhost:8080#Customize UI

spring.application.name=Solution-Portal-Admin-Server


spring.boot.admin.ui.title = Portal Monitoring
spring.boot.admin.ui.brand = Rent Control

管理服务器控制台错误日志


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__,| / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.0)

2021-03-18 12:45:07.746  INFO 1944 --- [           main] c.s.adminServer.AdminServerApplication   : Starting AdminServerApplication using Java 1.8.0_231 on SaraTHI with PID 1944 (D:\PROJECT\workspace\adminServer\target\classes started by NIC-6 (Sarathi) in D:\PROJECT\workspace\adminServer)
2021-03-18 12:45:07.762  INFO 1944 --- [           main] c.s.adminServer.AdminServerApplication   : No active profile set,falling back to default profiles: default
2021-03-18 12:45:08.849  INFO 1944 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 3031 (http)
2021-03-18 12:45:08.866  INFO 1944 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-03-18 12:45:08.866  INFO 1944 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.39]
2021-03-18 12:45:09.011  INFO 1944 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-03-18 12:45:09.011  INFO 1944 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1218 ms
2021-03-18 12:45:09.393  INFO 1944 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-18 12:45:09.534  WARN 1944 --- [           main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
2021-03-18 12:45:09.994  INFO 1944 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2021-03-18 12:45:10.026  INFO 1944 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 3031 (http) with context path ''
2021-03-18 12:45:10.044  INFO 1944 --- [           main] c.s.adminServer.AdminServerApplication   : Started AdminServerApplication in 2.599 seconds (JVM running for 2.981)
2021-03-18 12:45:10.317  INFO 1944 --- [nio-3031-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring dispatcherServlet 'dispatcherServlet'
2021-03-18 12:45:10.317  INFO 1944 --- [nio-3031-exec-1] o.s.web.servlet.dispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-03-18 12:45:10.319  INFO 1944 --- [nio-3031-exec-1] o.s.web.servlet.dispatcherServlet        : Completed initialization in 2 ms
2021-03-18 12:45:20.612  INFO 1944 --- [     parallel-4] d.c.b.a.server.services.StatusUpdater    : Couldn't retrieve status for Instance(id=403c064424bb,version=0,registration=Registration(name=solution-portal,managementUrl=http://SaraTHI:3030/actuator,healthUrl=http://SaraTHI:3030/actuator/health,serviceUrl=http://SaraTHI:3030/,source=http-api),registered=true,statusInfo=StatusInfo(status=UNKNowN,details={}),statusTimestamp=2021-03-18T07:15:10.549Z,info=Info(values={}),endpoints=Endpoints(endpoints={health=Endpoint(id=health,url=http://SaraTHI:3030/actuator/health)}),buildVersion=null,tags=Tags(values={}))

java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 10000ms in 'map' (and no fallback has been configured)
    at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:294) ~[reactor-core-3.4.0.jar:3.4.0]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ⇢ Request to GET health [DefaultWebClient]
Stack trace:
        at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:294) ~[reactor-core-3.4.0.jar:3.4.0]
        at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:279) ~[reactor-core-3.4.0.jar:3.4.0]
        at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:418) ~[reactor-core-3.4.0.jar:3.4.0]
        at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[reactor-core-3.4.0.jar:3.4.0]
        at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:119) ~[reactor-core-3.4.0.jar:3.4.0]
        at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[reactor-core-3.4.0.jar:3.4.0]
        at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[reactor-core-3.4.0.jar:3.4.0]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_231]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[na:1.8.0_231]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[na:1.8.0_231]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_231]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_231]
        at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_231]


客户端应用程序pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.rent</groupId>
    <artifactId>rentMngWithAdmin</artifactId>
    <version>1.0</version>
    <name>e-Rent</name>
    <description>Rent Contol office managemant project</description>
    <packaging>jar</packaging>

    <properties>
    <java.version>1.8</java.version>
  </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>2.4.0</version>
        </dependency>
        <!-- validation -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

客户端应用application.properties

spring.application.name=solution-portal

#============ custom paths  ==============#
app.fileWebServiceURL=http://10.173.53.170:3453//

server.port=3030

spring.datasource.url=jdbc:postgresql://10.173.53.170:5432/RentControlDB
spring.datasource.username=postgres
spring.datasource.password=******

# Hibernate ddl auto (create,create-drop,validate,update)
spring.jpa.hibernate.ddl-auto = update

spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

################ set file max size ######################
# Max file size.
spring.servlet.multipart.max-file-size=50MB
# Max request size.
spring.servlet.multipart.max-request-size=51MB
############# logging ###############
logging.level.org.hibernate.sql=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

logging.level.org.springframework.web=info

logging.file.name=solution-portal.log

allowed.origin=http://localhost:4200

spring.boot.admin.client.url=http://localhost:3031

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

我的客户端应用程序对 http://localhost:3030/actuator/health 的响应

{
    "status": "UP","components": {
        "db": {
            "status": "UP","details": {
                "database": "Postgresql","validationQuery": "isValid()"
            }
        },"diskSpace": {
            "status": "UP","details": {
                "total": 144703483904,"free": 95233036288,"threshold": 10485760,"exists": true
            }
        },"ping": {
            "status": "UP"
        }
    }
}

请帮我解决这个问题。提前致谢:)

解决方法

在我的情况下,客户端主机名被转换为本地无法访问的公共 IP。因此,在客户端注册中首选 IP 地址有帮助:

spring.boot.admin.client.instance.prefer-ip=true

documentation