关于zookeeper那点事<2021-10-31>

springcloud关于将服务注册到注册中心可能会出现以下问题,仅供参考(不喜勿喷)!


前言

    zookeeper下载地址:zookeeper

    zookeeper图像化工具ZooInspector的使用:下载地址

            下载完成找到build下的.jar文件,双击运行

怎样将服务注册到zookeeper:

首先要引入spring整合zookeeper的依赖

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>

</dependency>

在启动类上表示注解

@EnableDiscoveryClient/*该注解用于向使用consul或者zookeeper作为注册中心时注册服务*/

然后启动项目可能会正常运行(那你很幸运),可能会出现内存泄露的异常,发现服务没有启动成功。

如果启动不成功可能会报内存泄露的警告

The web application [ROOT] appears to have started a thread named [Curator-ConnectionStateManager-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:

并且抛出线程异常信息:

sun.misc.Unsafe.park(Native Method)

java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)

java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)

java.util.concurrent.DelayQueue.take(DelayQueue.java:211)

java.util.concurrent.DelayQueue.take(DelayQueue.java:70)

org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:920)

org.apache.curator.framework.imps.CuratorFrameworkImpl.access$300(CuratorFrameworkImpl.java:73)

org.apache.curator.framework.imps.CuratorFrameworkImpl$4.call(CuratorFrameworkImpl.java:322)

java.util.concurrent.FutureTask.run(FutureTask.java:266)

java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)

java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)

java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

java.lang.Thread.run(Thread.java:748)


解决问题:

    造成这个原因可能是因为spring-cloud-starter-zookeeper-discovery 依赖版本的jar包跟你安装的zookeeper版本冲突造成

此时更改依赖关系:不使用spring-cloud-starter-zookeeper-discovery依赖的jar包

<dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>

    <exclusions>

            <exclusion>

                <groupId>org.apache.zookeeper</groupId>

                <artifactId>zookeeper</artifactId>

        </exclusion>

    </exclusions>

</dependency>


并引入你安装zookeeper版本的依赖,这里我使用的是3.4.8

<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.8</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions></dependency>


注:一定要加上<exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions>

可能会造成与springboot依赖的冲突找不到slf4j



以上仅供参考,如对你有帮助记得点赞三连!

                                                                                                                                                                                                                --完---

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容