springboot+dubbo项目启动项目时报错 zookeeper not connected

这篇具有很好参考价值的文章主要介绍了springboot+dubbo项目启动项目时报错 zookeeper not connected。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现象

项目在公司网络启动时,能正常启动。但通过vpn连接到公司网络时却无法启动报下面的错误java.lang.IllegalStateException: zookeeper not connected

Caused by: java.lang.IllegalStateException: zookeeper not connected
	at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init>(CuratorZookeeperClient.java:84)
	at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.createZookeeperClient(CuratorZookeeperTransporter.java:26)
	at org.apache.dubbo.remoting.zookeeper.AbstractZookeeperTransporter.connect(AbstractZookeeperTransporter.java:68)
	at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration.<init>(ZookeeperDynamicConfiguration.java:66)
	at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory.createDynamicConfiguration(ZookeeperDynamicConfigurationFactory.java:43)
	at org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory.lambda$getDynamicConfiguration$0(AbstractDynamicConfigurationFactory.java:39)
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
	at org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory.getDynamicConfiguration(AbstractDynamicConfigurationFactory.java:39)
	at org.apache.dubbo.common.config.configcenter.DynamicConfiguration.getDynamicConfiguration(DynamicConfiguration.java:224)
	at org.apache.dubbo.config.bootstrap.DubboBootstrap.prepareEnvironment(DubboBootstrap.java:1024)
	at org.apache.dubbo.config.bootstrap.DubboBootstrap.startConfigCenter(DubboBootstrap.java:619)
	at org.apache.dubbo.config.bootstrap.DubboBootstrap.initialize(DubboBootstrap.java:521)
	at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:244)
	at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:206)
	at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.doGetInjectedBean(ReferenceAnnotationBeanPostProcessor.java:165)
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.getInjectedObject(AbstractAnnotationBeanPostProcessor.java:409)
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor$AnnotatedFieldElement.inject(AbstractAnnotationBeanPostProcessor.java:626)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.postProcessPropertyValues(AbstractAnnotationBeanPostProcessor.java:179)
	... 78 common frames omitted
Caused by: java.lang.IllegalStateException: zookeeper not connected
	at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init>(CuratorZookeeperClient.java:81)
	... 96 common frames omitted
Disconnected from the target VM, address: '127.0.0.1:52979', transport: 'socket'

Process finished with exit code 1

猜测:连接到zookeeper的服务器网络策略不通
— 通过telnet证实端口网络时通的。该猜测不成立。

定位问题

进一步经过报错的日志,找到对应的源码。

public class CuratorZookeeperClient extends AbstractZookeeperClient<CuratorZookeeperClient.NodeCacheListenerImpl, CuratorZookeeperClient.CuratorWatcherImpl> {

    protected static final Logger logger = LoggerFactory.getLogger(CuratorZookeeperClient.class);
    private static final String ZK_SESSION_EXPIRE_KEY = "zk.session.expire";

    static final Charset CHARSET = StandardCharsets.UTF_8;
    private final CuratorFramework client;
    private static Map<String, NodeCache> nodeCacheMap = new ConcurrentHashMap<>();

    public CuratorZookeeperClient(URL url) {
        super(url);
        try {
            int timeout = url.getParameter(TIMEOUT_KEY, DEFAULT_CONNECTION_TIMEOUT_MS);
            int sessionExpireMs = url.getParameter(ZK_SESSION_EXPIRE_KEY, DEFAULT_SESSION_TIMEOUT_MS);
            CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder()
                    .connectString(url.getBackupAddress())
                    .retryPolicy(new RetryNTimes(1, 1000))
                    .connectionTimeoutMs(timeout)
                    .sessionTimeoutMs(sessionExpireMs);
            String authority = url.getAuthority();
            if (authority != null && authority.length() > 0) {
                builder = builder.authorization("digest", authority.getBytes());
            }
            client = builder.build();
            client.getConnectionStateListenable().addListener(new CuratorConnectionStateListener(url));
            client.start();
            boolean connected = client.blockUntilConnected(timeout, TimeUnit.MILLISECONDS);
            if (!connected) {
                throw new IllegalStateException("zookeeper not connected");
            }
        } catch (Exception e) {
            throw new IllegalStateException(e.getMessage(), e);
        }
    }

可以看出 是 boolean connected = client.blockUntilConnected(timeout, TimeUnit.MILLISECONDS); 这里 connected 返回了fasle导致的问题。
然后下端点, 发现timeout = 3000 ,也就说3秒内需要链接成功,否则就会超时。

推测由于vpn的方式连接的 zk服务器,很有可能是 3秒内没有得到服务端的正确响应,而导致了异常,然后抛出了异常。

基于上的推测,将该timeout的默认值3000改大一些后,然后就启动成功了。

解决

修改dubbo的配置,下面是springboot的项目,修改的方式。
从上面的报错信息是可以看出是 configcenter的连接超时。下面配置了三个配置的超时时间,可根据情况进行配置。

dubbo:
  config-center:
    timeout: 60000
  metadata-report:
    timeout: 60000
  registry:
    timeout: 60000

注意: 有可能版本的问题,上面3个属性,全部配置了,有可能项目启动报错, 请根据保持信息,适当调整删减属性后重试。文章来源地址https://www.toymoban.com/news/detail-503736.html

到了这里,关于springboot+dubbo项目启动项目时报错 zookeeper not connected的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue:项目启动时报错These dependencies were not found 解决办法

    在命令提示符中输入下载依赖包的命令 出现错误 原因分析 可能因为npm版本过高,所以对某些命令比npm6.x更严格 解决方案 1、删掉node_moudles文件夹 2、使用npm install –legacy-peer-deps重新安装所有依赖包 每天进步一点点,开心也多一点点

    2024年01月19日
    浏览(67)
  • idea的maven多模块项目启动时报错:Could not find artifact或者错误找不到符号

    1、问题描述: 多个项目中遇到idea的多模块maven项目,在启动的时候会报错: 【Could not find artifact,找不到包】 或者 【错误:找不到符号(但明明代码不报红)】 但是在别人的idea上却能正常启动。 2、解决方法: (1)原因说明: 后来发现,项目启动时,idea会自动调用mav

    2024年02月17日
    浏览(58)
  • SpringBoot整合Dubbo+Zookeeper

    Dubbo概述 学习Dubbo前你要了解这些 安装zk Zookeeper概述与安装 Dubbo在zk中的存储结构 Dubbo的注册中心有哪些 1、 Multicast :Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。 2、 Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推

    2024年02月04日
    浏览(43)
  • SpringBoot + Dubbo + zookeeper实现

    目录 一,框架搭建 1. 启动zookeeper ! 2. IDEA创建一个空项目; 3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可 4.项目创建完毕,我们写一个服务,比如卖票的服务 编写接口 编写实现类 编写service 二,服务提供者 1,第一步  zookeeper的包我们去maven仓库下载,

    2024年04月26日
    浏览(39)
  • SpringBoot学习(八)-SpringBoot + Dubbo + zookeeper

    1)什么是分布式系统? 在《分布式系统原理与范型》一书中有如下定义:“ 分布式系统是若干独立计算机的集合 ,这些计算机对于用户来说就 像单个相关系统 ”; 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统 。分布式

    2024年02月02日
    浏览(67)
  • 【SpringBoot整合Dubbo和Zookeeper】

    本笔记内容为狂神说SpringBoot集成Dubbo和Zookeeper部分 目录 一、Dubbo dubbo基本概念 调用关系说明 二、Dubbo环境搭建  三、Window下安装zookeeper 1、下载zookeeper  2、运行 3、测试 四、window下安装dubbo-admin 1、下载dubbo-admin 2、解压进入目录 3、在项目目录下打包dubbo-admin 4、执行 五、S

    2024年02月08日
    浏览(35)
  • SpringBoot~ dubbo + zookeeper实现分布式开发的应用

    配置服务名字, 注册中心地址, 扫描被注册的包 server.port=8081 #当前应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #扫描指定包下服务 dubbo.scan.base-packages=com.demo.service 实现一个接口,在接口中完成需求 public interface Translate { String tran

    2024年04月10日
    浏览(51)
  • 启动springboot项目时报错:​无法访问org.springframework.web.bind.annotation.GetMapping …具有错误的版本 61.0,应为52.0​

    报错原因:jdk版本1.8 与 spring boot 3.0.1 版本不匹配 解决方案:将springboot版本降级即可(比如2.5.4就是稳定版本)。如下图:  注意:修改完成后刷新下maven,如下图。 启动成功后,如下图。  由上图可知,启动时携带的端口是8080,context path是空,也就是说访问时一个斜杠就

    2024年02月11日
    浏览(54)
  • zookeeper和dubbo面试题,,Java初级项目案例

    一致性(Consistency)是指多副本(Replications)问题中的数据一致性。可以分为强一致性、顺序一致性与弱一致性。 1.1 强一致性(Strict Consistency) 也称为:**原子一致性(Atomic Consistency)** 线性一致性(Linearizable Consistency) 强一致性有两个要求: 任何一次读都能读到某个数据

    2024年03月16日
    浏览(43)
  • Alibaba spring cloud Dubbo使用(基于Zookeeper或者基于Nacos+泛化调用完整代码一键启动)

    Dubbo!用更优雅的方式来实现RPC调用吧 - 掘金 项目结构: 仅仅是提供服务的接口: pom: DubboServerApplication: HelloServiceImpl实现dubbo服务: 配置文件application.yaml: zookeeper是我的一台云服务器,zookeeper需要先部署好。 pom文件与Server相似: DubboClientApplication: RpcService: 通过Reference注

    2024年04月14日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包