
dubbo集成zipkin官网博客地址
在 Dubbo 中使用 Zipkin
遇到的问题运行官网的demo报错zookeeper not connected,链接不上zookeeper,开始以为是zookeeper的版本和项目依赖的版本不一致,改了几个版本之后还是不行,然后在本机启动了一个zookeeper,使用127.0.0.1:2181来链接,发现可以链接成功(demo和zookeeper运行在一起的时候链接挺快的,没啥问题),检查了zookeeper的地址确实没错。
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name \'helloService\': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: zookeeper not connected at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:177) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:103) at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1640) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) ... 15 moreCaused by: java.lang.IllegalStateException: zookeeper not connected at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient. init (CuratorZookeeperClient.java:83) at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.createZookeeperClient(CuratorZookeeperTransporter.java:26) at org.apache.dubbo.remoting.zookeeper.support.AbstractZookeeperTransporter.connect(AbstractZookeeperTransporter.java:70) at org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter$Adaptive.connect(ZookeeperTransporter$Adaptive.java) at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration. init (ZookeeperDynamicConfiguration.java:70) at org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory.createDynamicConfiguration(ZookeeperDynamicConfigurationFactory.java:37) at org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory.lambda$getDynamicConfiguration$0(AbstractDynamicConfigurationFactory.java:39) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) at org.apache.dubbo.common.config.configcenter.AbstractDynamicConfigurationFactory.getDynamicConfiguration(AbstractDynamicConfigurationFactory.java:39) at org.apache.dubbo.common.config.configcenter.DynamicConfiguration.getDynamicConfiguration(DynamicConfiguration.java:223) at org.apache.dubbo.config.bootstrap.DubboBootstrap.prepareEnvironment(DubboBootstrap.java:857) at org.apache.dubbo.config.bootstrap.DubboBootstrap.startConfigCenter(DubboBootstrap.java:603) at org.apache.dubbo.config.bootstrap.DubboBootstrap.useRegistryAsConfigCenterIfNecessary(DubboBootstrap.java:671) at org.apache.dubbo.config.bootstrap.DubboBootstrap.initialize(DubboBootstrap.java:509) at org.apache.dubbo.config.bootstrap.DubboBootstrap.init(DubboBootstrap.java:494) at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:190) at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:158) at org.apache.dubbo.config.spring.ReferenceBean.getObject(ReferenceBean.java:68) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:170) ... 20 moreCaused by: java.lang.IllegalStateException: zookeeper not connected at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient. init (CuratorZookeeperClient.java:80) ... 38 more参考解决方案记一次dubbo连接zookeeper注册中心发生异常的排查经历这个文章里面的错误和上面的错误一样,参考他的解决方案可以解决,这里记录一下报错的原因是什么。
问题分析第一步根据报错信息和异常信息,报错信息在CuratorZookeeperClient.java:80的80行,报错的原因从代码上看就是zookeeper链接不上。之前确认了zookeeper地址、版本啥的确实没错,看方法看到这里有一个timeout属性,debug来看一下。debug之后发现这里的超时时间是3000,也就是3秒钟,估计3秒钟太短了,所以导致链接不上。
然后通过代码得到timeout这个属性是从url里面获取的,url里面的timeout属性就是3000 。
知道超时时间是从url里面来的,然后就是看url是怎么来的。
通过调用的堆栈信息找到DubboBootstrap这里类的useRegistryAsConfigCenterIfNecessary的这个方法,这里会判断配置管理器有没有ConfigCenterConfig这个配置,如果没有,就会把registryConfig的一些属性赋值给一个新建的ConfigCenterConfig,在554行的位置会判断有没有timeout这个属性,如果有就获取这里的timeout,如果没有就使用默认的,ConfigCenterConfig这个类默认的private Long timeout = 3000L;就是3000L.
知道这个timeout怎么来的,然后对其进行相对应的修改就可以了。
在dubbo:registry标签添加一个timeout属性就可以。
dubbo:registry address=\"zookeeper://${zookeeper.address:192.168.1.78}:2181\" timeout=\"25000\"/ 方法二添加一个dubbo:config-center的标签,设置 timeout属性。
dubbo:config-center timeout=\"23000\" /dubbo:config-centerdemo都是基于xml来实现的。
本文链接: http://discoverx.immuno-online.com/view-1517410038.html