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

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日
  • 展开全部

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题