美文网首页
Spring Cloud 使用zookeeper为注册中心

Spring Cloud 使用zookeeper为注册中心

作者: f22448cd5541 | 来源:发表于2019-06-19 17:32 被阅读0次

    现在主流的注册中心都是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与服务端的版本没有匹配上,可以打印依赖树,看看自己配置的依赖是否起作用了。

    相关文章

      网友评论

          本文标题:Spring Cloud 使用zookeeper为注册中心

          本文链接:https://www.haomeiwen.com/subject/llokqctx.html