前言

1 使用Zookeeper代替Eureka作为注册中心

1.1 Zookeeper简介

Zookeeper分布式协调工具,可以实现注册中心

Zookeeper节点类型:临时节点

1.3 Zookeeper安装与使用

1.3.1 windows下载Zookeeper

1. 下载与安装

博客详解(别人博客)

2. 修改zkServer.cmd配置文件

3. 下载Zookeeper的图形界面的管理工具ZooInspector工具,解压之后便可使用

4. 进入Zookeeper解压之后的目录,直到bin目录,在该目录输入cmd进入控制台

5. 在控制台运行zkServer.cmd便可开启Zookeeper服务

2 使用Zookeeper作为注册中心步骤

zookeeper作为注册中心与Eureka作为注册中心的区别在于Eureka需要编写一个服务的启动类,但Zookeeper不需要

Zookeeper只需要打开ZooInspector工具,连接服务即可(确保在cmd中运行zkServer.cmd)

2.1 创建会员服务

2.1.1 配置pom文件

     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
      </parent>
      <groupId>com.fyzn12</groupId>
      <artifactId>springcloud-zk-member</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>

      <name>springcloud-zk-member Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>

      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>

      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR2</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
      <dependencies>
        <!-- 导入springboot的启动器-->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 导入springcloud整合feign客户端启动器-->
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- 导入springcloud整合Zookeeper启动器-->
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
        </dependency>
      </dependencies>  

2.1.2 创建application.yml文件

    # member服务的端口号
    server:
      port: 2182
    # member服务的别名
    spring:
      application:
        name: zk-member
      cloud:
        zookeeper:
          # member注册到Zookeeper上的地址,也就是注册中心的地址
          connect-string: 127.0.0.1:2181   

2.1.3 创建Controller作为测试接口

        /**
         * @author fyzn12
         * @version 1.0
         * @date 2020/7/26 18:02
         * @description:TODO
         */
        @RestController
        public class ZkController {
            @Value("${server.port}")
            private String port;
            @RequestMapping("/getMember")
            public String getMember() {
                System.out.println("跳转到会员服务");
                return "我是测试zookeeper,端口号"+port;
            }

        }  

2.1.4 创建启动类,这里需要使用@EnableDiscoveryClient注解

        /**
         * @author fyzn12
         * @version 1.0
         * @date 2020/7/26 18:18
         * @description:TODO
         */
        @SpringBootApplication
        @EnableDiscoveryClient
        public class AppZkMember2 {
            public static void main(String[] args) {
                SpringApplication.run(AppZkMember2.class,args);
            }
        }         

2.1.5 启动多个member服务作为集群,端口号分别为2182、2183

2.2 创建订单服务

2.2.1 配置pom文件(如上面会员服务)

2.2.2 创建application.yml文件

        # 订单服务的端口号
        server:
          port: 2184
        # 订单服务的别名
        spring:
          application:
            name: zk-order
          cloud:
            zookeeper:
              # 订单服务注册到Zookeeper上的地址,也就是注册中心的地址
              connect-string: 127.0.0.1:2181       

2.2.3 使用feign客户端调用

1. 创建feign客户端调用接口

        /**
         * @author fyzn12
         * @version 1.0
         * @date 2020/7/26 18:28
         * @description:TODO
         */
        @FeignClient("zk-member")
        public interface MemberFeign {
            @RequestMapping("/getMember")
            String getMember();
        }

2. 必要说明

  1. 在创建的feign客户端接口类中必须要使用@FeignClient注解,并且该注解中默认必须给定一个name或者value的值,该值为会员服务的别名,即会员服务配置文件application.yml中指定spring.application.name的值,这里为zk-member.
  2. 在该接口类中指定需要调用的接口,必须与会员服务的接口名一致(两个一致:1 @RequestMapping指定的地址一致 2 方法名一致)

2.2.4 创建启动类

这里与会员服务不同的是,需要在订单服务的启动类上面多加一个@EnableFeignClients注解,用于开启feign客户端调用

        /**
         * @author fyzn12
         * @version 1.0
         * @date 2020/7/26 18:25
         * @description:TODO
         */
        @SpringBootApplication
        @EnableDiscoveryClient
        @EnableFeignClients
        public class AppOrder {
            public static void main(String[] args) {
                SpringApplication.run(AppOrder.class,args);
            }
        }

2.2.5 创建接口

    /**
     * @author fyzn12
     * @version 1.0
     * @date 2020/7/26 18:25
     * @description:TODO
     */
    @RestController

    public class OrderController {
        @Autowired
        private MemberFeign memberFeign;
        @RequestMapping("/getOrder")
        public String getOrder(){
            //String member = "http:zk-member/getMember";
            return memberFeign.getMember();
        }
    }  

2.2.6 测试