java - Spring Boot 服务在空闲或服务请求过多后自动关闭

标签 java spring spring-boot microservices netflix-eureka

我有基于 v2.1.4.RELEASE 的“my-app”spring boot 服务。该服务充当我所有微服务的 Controller 。我正在使用 Eureka 来注册所有其他微服务以及这个我的应用程序( Controller )。我在这项服务中遇到了一些异常行为。

  1. 在空闲模式下,它会自动停止响应。

  2. 当服务太多请求时,它会在一段时间后停止响应。

    深入研究日志后,我发现了以下堆栈跟踪:

01-07-2021 09:32:19.675 [AsyncResolver-bootstrap-executor-0] INFO  c.n.d.s.r.aws.ConfigClusterResolver.getClusterEndpoints - Resolving eureka endpoints via configuration
01-07-2021 09:32:20.057 [Thread-13] INFO  c.n.l.PollingServerListUpdater.run - Shutting down the Executor Pool for PollingServerListUpdater
01-07-2021 09:32:20.058 [Thread-9] INFO  o.s.c.n.e.s.EurekaServiceRegistry.deregister - Unregistering application MY-APP with eureka with status DOWN
01-07-2021 09:32:20.058 [Thread-9] WARN  c.netflix.discovery.DiscoveryClient.notify - Saw local status change event StatusChangeEvent [timestamp=1625112140058, current=DOWN, previous=UP]
01-07-2021 09:32:20.059 [DiscoveryClient-InstanceInfoReplicator-0] INFO  c.netflix.discovery.DiscoveryClient.register - DiscoveryClient_MY-APP/MY-APP:9c84f59eab3882519f16fd7be15bb138: registering service...
01-07-2021 09:32:20.061 [Thread-9] INFO  c.n.u.c.ShutdownEnabledTimer.cancel - Shutdown hook removed for: NFLoadBalancer-PingTimer-CALLMASTERS
01-07-2021 09:32:20.063 [DiscoveryClient-InstanceInfoReplicator-0] INFO  c.netflix.discovery.DiscoveryClient.register - DiscoveryClient_MY-APP/MY-APP:9c84f59eab3882519f16fd7be15bb138 - registration status: 204
01-07-2021 09:32:20.073 [Thread-9] INFO  c.n.u.c.ShutdownEnabledTimer.cancel - Exception caught (might be ok if at shutdown)
    java.lang.IllegalStateException: Shutdown in progress
            at java.lang.ApplicationShutdownHooks.remove(ApplicationShutdownHooks.java:82)
            at java.lang.Runtime.removeShutdownHook(Runtime.java:239)
            at com.netflix.util.concurrent.ShutdownEnabledTimer.cancel(ShutdownEnabledTimer.java:70)
            at com.netflix.loadbalancer.BaseLoadBalancer.cancelPingTask(BaseLoadBalancer.java:613)
            at com.netflix.loadbalancer.BaseLoadBalancer.shutdown(BaseLoadBalancer.java:864)
            at com.netflix.loadbalancer.DynamicServerListLoadBalancer.shutdown(DynamicServerListLoadBalancer.java:285)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:337)
            at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:271)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:571)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:543)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:1055)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:504)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:1062)
            at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1057)
            at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1026)
            at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:975)

我的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
4.0.0 org.springframework.boot spring-boot-starter-父级 2.1.4.发布 com.akash 我的 Controller 0.0.1-快照 我的 Controller 1.8
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- new dependency -->

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <version>2.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.0.12.Final</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.16</version>
    </dependency>

    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>com.netflix.ribbon</groupId>
        <artifactId>ribbon-core</artifactId>
        <version>2.2.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.9.1</version>
    </dependency>
</dependencies>

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

<description>core Controller</description>

应用程序属性

spring.application.name=MY-APP-CONTROLLER
port.no=8585
host.name=localhost
logging.config=configuration/logback.xml
server.ip=http://my-app.eureka.com/eureka/
eureka.client.service-url.default-zone=http://my- 
app.eureka.com/eureka
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=510MB
server.tomcat.max-threads=500
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true

这里需要进行什么配置吗?

提前感谢您的帮助! :)

最佳答案

可能是依赖版本问题

尝试将其添加到您的 pom

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR6</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

然后删除 Spring Cloud 依赖项中指定的所有版本。例如

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

关于java - Spring Boot 服务在空闲或服务请求过多后自动关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68206171/

相关文章:

java - 如何更改 Spring STS 仪表板中的语言

java - JSON 路径 "$.name"处没有值,异常 : json can not be null or empty, 使用 Mockmvc 和 Spring-boot

java - 当我在 Antlr 中导入词法分析器时,为什么会收到 NullPointerException?

java - 在 Spring 中,如何将自定义参数自动填充到 web @Controller 方法?

java - 从一个文件中获取整数列表

java - Spring Data Jpa 入门

java - 使用 Java Spring RestTemplate 上传大型二进制文件

Spring mvc junit 测试服务

spring-boot - Camel Upgrade 2.22 破坏了 Apache CXF 端点

java - 如何使用文档的 tf*idf 分数实现余弦相似度?