1.linux服务器安装zookeeper

具体安装见之前的博客:zookeeper入门

2.启动zookeeper

zookeeper服务端产生大量snapshot文件_zookeeper

我们以一个订单服务调用支付服务为例

3.创建支付服务

pom

<dependencies>

        <!-- SpringBoot整合zookeeper客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <!--先排除自带的zookeeper3.5.3-->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--添加zookeeper3.4.9版本-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>top.xkuna</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>


        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

此时我们需要注意的是zookeeper的依赖版本要大于等于服务器的zookeeper版本,所以我们将spring-cloud-starter-zookeeper-discovery依赖中的zookeeper排除,然后导入大于等于服务器的zookeeper版本的依赖

建议看完下面的步骤 在服务启动前 再看踩坑点

———————踩坑点——————————

关于slf4j-log4j12的冲突

spring-boot-starter-web依赖中含有log4j及其他相关的jar包

zookeeper服务端产生大量snapshot文件_分布式_02

与zookeeper依赖(不是starter的zookeeper,是后来单独引入的zookeeper)自带的slf4j-log4j12jar包冲突

zookeeper服务端产生大量snapshot文件_分布式_03

那么我们不处理的情况下,启动会报错

zookeeper服务端产生大量snapshot文件_ci_04

解决的办法有两个:

1.将zookeeper的slf4j-log4j12排除

zookeeper服务端产生大量snapshot文件_spring_05

修改后启动成功 无其他的报错


zookeeper服务端产生大量snapshot文件_分布式_06

2.修改zookeeper和 web 依赖的顺序,先导入 web的依赖,再导入zookeeper的依赖

zookeeper服务端产生大量snapshot文件_分布式_07

此时 ,会报绑定错误,但是不影响服务的启动

zookeeper服务端产生大量snapshot文件_java_08

yml

zookeeper服务端产生大量snapshot文件_java_09

创建主启动类

zookeeper服务端产生大量snapshot文件_java_10

注意需要在主启动类 打上 @EnableDiscoveryClient注解

创建controller

zookeeper服务端产生大量snapshot文件_ci_11

启动服务

如果出现报错先看上面写的pom方面及踩坑点

zookeeper服务端产生大量snapshot文件_分布式_12

启动成功查看zookeeper

zookeeper服务端产生大量snapshot文件_spring_13

查看根节点 发现多了 /service节点

/service节点是我们的服务节点

zookeeper服务端产生大量snapshot文件_ci_14

service节点下便是我们注册进的cloud-provider-payment服务节点

zookeeper服务端产生大量snapshot文件_spring_15

继续查看

zookeeper服务端产生大量snapshot文件_java_16

看到的则是我们的支付服务注册进的正在运行的一个子服务,如果我们注册的支付服务是服务集群 此时在cloud-provider-payment服务节点下有多个子服务节点

我们获取该子服务的信息

zookeeper服务端产生大量snapshot文件_分布式_17

我们复制查看json,发现json中含有该子服务的信息

zookeeper服务端产生大量snapshot文件_分布式_18

我们试想该服务节点是临时节点还是持久节点

我们关掉服务查看发现支付服务列表为空 说明服务节点为临时节点

zookeeper服务端产生大量snapshot文件_zookeeper_19

4.创建订单服务

pom

<dependencies>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- SpringBoot整合zookeeper客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <!--先排除自带的zookeeper-->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--添加zookeeper3.4.9版本-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

yml

zookeeper服务端产生大量snapshot文件_zookeeper_20

创建主启动类

zookeeper服务端产生大量snapshot文件_zookeeper_21

创建restTempalte配置类

zookeeper服务端产生大量snapshot文件_spring_22

创建controller 调用支付服务

zookeeper服务端产生大量snapshot文件_ci_23

启动订单服务

zookeeper服务端产生大量snapshot文件_分布式_24

启动成功后查看zookeeper是否注册了该服务

zookeeper服务端产生大量snapshot文件_ci_25

使用postman测试订单服务调用支付服务

zookeeper服务端产生大量snapshot文件_ci_26

5.结束语

此时zookeeper服务注册中心 简单的服务之间调用就实现了

是不是很简单呢~~ 😄😄