vv0885 2023-02-26 09:56 采纳率: 0%
浏览 122
已结题

Zookeeper客户端断开链接时报错

遇到的问题
客户端程序退出时报如下错误

2023-02-26 09:18:08.342 [main-EventThread] ERROR o.apache.curator.framework.recipes.cache.NodeCache - 
java.lang.IllegalStateException: Expected state [STARTED] was [STOPPED]
    at org.apache.curator.shaded.com.google.common.base.Preconditions.checkState(Preconditions.java:823)
    at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkState(CuratorFrameworkImpl.java:423)
    at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkExists(CuratorFrameworkImpl.java:450)
    at org.apache.curator.framework.recipes.cache.NodeCache.reset(NodeCache.java:261)
    at org.apache.curator.framework.recipes.cache.NodeCache.access$100(NodeCache.java:60)
    at org.apache.curator.framework.recipes.cache.NodeCache$2.process(NodeCache.java:104)
    at org.apache.curator.framework.imps.NamespaceWatcher.process(NamespaceWatcher.java:77)
    at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:580)
    at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:555)

业务简单描述

  • SpringBoot + Dubbo3写的一个服务,Zookeeper为注册中心;
  • Client端是定时任务,通过crontab进行调度;
  • 目前Server端没有报错,Client端在程序退出时报以上错误;
  • Client目前是启动执行完成业务后会退出,不会await,此时就会报上述错误;
  • Client如果启动后执行完成业务后不退出,一直await,则不会报上述错误。

环境

名称版本
JDK17
SpringBoot2.7.9
Dubbo3.1.7

Client端相关代码

@Slf4j
@EnableDubbo
@SpringBootApplication
public class Application implements CommandLineRunner {
    @Value("${spring.profiles.active}")
    private String springProfile;
    @DubboReference(
            version = "${services.version}"
            , url = "${services.url}")
    private TestServices services;

    public static void main(String[] args) {
        ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
        ApplicationModel.defaultModel().destroy();
        //System.exit(SpringApplication.exit(ctx, () -> 0));
    }

    @Override
    public void run(String... strings) {
        log.info(">>>>>>{}<<<<<<", springProfile);
        log.info("Result:{}", services.test());
    }
}

Client端pom中依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.9</version>
        <relativePath/>
    </parent>
    <properties>
        <dubbo.version>3.1.7</dubbo.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
......
    <dependencies>
        <!-- .............................................. spring boot ...-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- .............................................. dubbo ...-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
            <version>${dubbo.version}</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-reload4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

yml配置

server:
  shutdown: graceful

dubbo:
  application:
    name: test-consumer
  registry:
    id: test-consumer
    address: zookeeper://192.168.1.100:2181
  config-center:
    address: zookeeper://192.168.1.100:2181
  metadata-report:
    address: zookeeper://192.168.1.100:2181
  consumer:
    timeout: 3000
    check: false
    retries: 0

services:
  version: 1.0.0
  url:

望赐教!

  • 写回答

10条回答 默认 最新

  • MarkHan_ 2023-02-26 10:03
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    根据您提供的信息,看起来问题出现在您的 CuratorFramework 调用。具体来说,错误信息中的 java.lang.IllegalStateException 表示您的代码正在尝试使用已停止的 CuratorFramework 对象进行操作,而这显然是不允许的。

    可能的原因之一是在客户端程序退出时没有正确关闭 CuratorFramework 对象,导致该对象在程序退出时仍处于已启动状态,但此时已无法继续使用该对象进行操作。

    为解决这个问题,您可以尝试在客户端程序退出时显式地关闭 CuratorFramework 对象,例如:

    CuratorFramework client = ...; // 获取 CuratorFramework 对象
    client.close(); // 关闭对象
    
    
    

    另外,您的代码中似乎缺少了变量 key 的定义,这可能会导致编译错误或运行时异常。请确保 key 变量已经被正确定义和初始化。

    评论

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 赞助了问题酬金15元 3月1日
  • 修改了问题 2月28日
  • 赞助了问题酬金15元 2月27日
  • 展开全部

悬赏问题

  • ¥18 深度学习tensorflow1,ssdv1,coco数据集训练一个模型
  • ¥100 关于注册表摄像头和麦克风的问题
  • ¥30 代码本地运行正常,但是TOMCAT部署时闪退
  • ¥15 关于#python#的问题
  • ¥15 主机可以ping通路由器但是连不上网怎么办
  • ¥15 数据库一张以时间排好序的表中,找出多次相邻的那些行
  • ¥50 关于DynamoRIO处理多线程程序时候的问题
  • ¥15 kubeadm部署k8s出错
  • ¥15 Abaqus打不开cae文件怎么办?
  • ¥15 小程序准备上线,软件开发公司需要提供哪些资料给甲方