Spring Cloud 使用zookeeper为注册中心

现在主流的注册中心都是eureka,很多教程基本上都是eureka的,但是对于一些大厂而言,eureka还是比较新的东西,并且他只能在Spring cloud里使用,广泛性不是很好,也很难说服运维做 eurake做全球化部署以及维护。但是zookeeper是一个比较广泛的组件,大厂一般都有现成的,并且非常成熟。笔者也遇到相似的问题,借此机会把自己踩得坑记录下来,分享给大家。

Spring Cloud 版本和zookeeper版本

Spring Cloud 版本

<spring-cloud.version>Greenwich.SR1</spring-cloud.version>

------------------------------------------

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

注:在集成zookeeper的时候,一定要问清楚运维zookeeper的版本,因为不同版本,对依赖的选取完全不一样。否则就会报错。下面分两个版本,分别讲下。

zookeeper3.5.x 版本

依赖如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

注: 要去掉 netflix 所有相关组件依赖,否则可能导致失败。

配置如下:

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181  # zookeeper 地址
      discovery:
        enabled: true
        root: /services

注: 去掉 eureka.client 和 netflix 所有相关配置,否则可能导致失败。

zookeeper3.4.x 版本

依赖如下:

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.10</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    <exclusions>
    </exclusions>
</dependency>

配置如下:

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181  # zookeeper 地址
      discovery:
        enabled: true
        root: /services

FAQ

  1. 为什么要区分zookeeper版本?答案参考 http://curator.apache.org/zk-compatibility.html

  2. UnimplementedException: KeeperErrorCode = Unimplemented 这样的异常怎么解决?基本上可以判断,还是zookeeper client与服务端的版本没有匹配上,可以打印依赖树,看看自己配置的依赖是否起作用了。

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