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
以上仅供参考,如对你有帮助记得点赞三连!
--完---