springcloud之服务注册与发现(zookeeper注册中心)-Finchley.SR2版

新年第一篇博文,接着和大家分享springcloud相关内容;本次主要内容是使用cloud结合zookeeper作为注册中心来搭建服务调用,前面几篇文章有涉及到另外的eureka作为注册中心,有兴趣的朋友会回顾下上几篇文章。springcloud版本说明docker快速启动一个zookeeper服务zk-server服务提供者zk-client服务消费者启动多个zk-server服务提供者git源...

springcloud之服务注册与发现(zookeeper注册中心)-Finchley.SR2版

新年第一篇博文,接着和大家分享springcloud相关内容;本次主要内容是使用cloud结合zookeeper作为注册中心来搭建服务调用,前面几篇文章有涉及到另外的eureka作为注册中心,有兴趣的朋友会回顾下上几篇文章。

  • springcloud版本说明
  • docker快速启动一个zookeeper服务
  • zk-server服务提供者
  • zk-client服务消费者
  • 启动多个zk-server服务提供者
  • git源码地址:https://github.com/shenniubuxing3/springcloud-Finchley.SR2

springcloud版本说明

由于市面上其版本比较多,版本不一可能造成了读者尝试时版本问题,所以这里指明当前作者写文章时使用的cloud版本

springboot版本:

1  <parent>2<groupId>org.springframework.boot</groupId>3<artifactId>spring-boot-starter-parent</artifactId>4<version>2.0.7.RELEASE</version>5<relativePath/> <!-- lookup parent from repository -->6  </parent>

springcloud版本:

1  <properties>2<java.version>1.8</java.version>3<spring-cloud.version>Finchley.SR2</spring-cloud.version>4  </properties>

docker快速启动一个zookeeper服务

就我个人而言通常使用docker来运行启动一些第三方的服务,这里也用她来启动zk,首先pull镜像:

1 docker pull zookeeper2 docker run --name zookeeper -p 2081:2181 -d zookeeper3 docker logs dd51008f9f8f

一般采用默认镜像的配置即可启动,这里来看下启动后logs日志的部分截图:

能够看到镜像启动时读取了内置的zoo.cfg配置文件,并且zookeeper当前版本是3.4,我们使用可视化工具ZooInspector连接zookeeper,能够直观的看到如下默认节点信息:

目前看我们只有一个node节点,试想一下如果用zk作为注册中心,这里应该会有至少两个大节点,一个服务提供这节点,一个消费者注册的节点,下面会通过程序来创建。

zk-server服务提供者

在zk-server工程中,这里先创建zk的服务提供者节点,在pom工程中需要如下配置:

 1<!--zk--> 2<dependency> 3 <groupId>org.springframework.cloud</groupId> 4 <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> 5</dependency> 6<!--zk工具包--> 7<dependency> 8 <groupId>org.apache.zookeeper</groupId> 9 <artifactId>zookeeper</artifactId>10 <version>3.4.13</version>11 <exclusions>12  <exclusion>13<groupId>org.slf4j</groupId>14<artifactId>slf4j-log4j12</artifactId>15  </exclusion>16  <exclusion>17<groupId>log4j</groupId>18<artifactId>log4j</artifactId>19  </exclusion>20 </exclusions>21</dependency>

上面pom分了两步,第一个是springcloud使用zk做服务注册发现用的,第二个相当于连接zk服务的客户端包;然后在程序启动入口出增加注解@EnableDiscoveryClient

值得注意的是这里指定了zk服务的版本号3.4.13,就目前个人遇到的情况看,连接zk的客户端尽量和zk服务端版本保持一致,避免造成版本问题;作为一个服务提供端(server),我们还需要有一个暴露出去的接口服务,我这里定义如下接口:

 1 @RestController 2 public class UserController { 3  4  @Value("${server.port}") 5  private int port; 6  7  @GetMapping("/list") 8  public List<MoUser> getList() { 9 10return new ArrayList<MoUser>() {11 {12  add(new MoUser(1, "shenniu001_"   port));13  add(new MoUser(2, "shenniu002_"   port));14  add(new MoUser(3, "shenniu003_"   port));15 }16   };17  }18 }

通过接口把服务启动的端口返回出去,来达到区分不同接口的作用。有了接口代码后,还剩下连接zk服务的一些列配置,application.yml中的配置信息如:

 1 spring: 2   application: 3  name: zk-server 4   cloud: 5  zookeeper: 6 connect-string: localhost:2081 7 discovery: 8register: true 9enabled: true10instance-id: 111root: /shenniu12 server:13port: 6061

参数的简单说明:

  1. connect-string:连接zk服务的连接串
  2. register: 是否启动服务注册
  3. instance-id: zk唯一id的标识
  4. root: zk根节点名称,默认/services

有了如上的配置,我们就能够启动zk-server程序了;首先访问暴露的接口正常:

然后再查看可视化视图工具ZooInsector有如下新增信息:

这个时候能够说明zk-server服务往zk服务端注册成功了,zk服务端节点上包含了zk-server服务的一些基本信息,如:ip,端口,名称;这些是服务注册与发现的基本信息

zk-client服务消费者

在zk-client工程中,服务消费者的pom配置与生产者很像,这里为了方便用了feign来访问服务端,如下pom配置:

 1<dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-feign</artifactId> 4 <version>1.4.6.RELEASE</version> 5</dependency> 6<dependency> 7 <groupId>org.springframework.cloud</groupId> 8 <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> 9</dependency>10<dependency>11 <groupId>org.apache.zookeeper</groupId>12 <artifactId>zookeeper</artifactId>13 <version>3.4.13</version>14 <exclusions>15 
源文地址:https://www.guoxiongfei.cn/cntech/9871.html