【SpringCloud】07 Zookeeper01 服务注册

Zookeeper环境搭建:

需要服务器Linux,或者虚拟机环境支持

从官网的目录下载最新版本的Zookeeper: https://downloads.apache.org/zookeeper/stable/ 

下载方式:

使用wget命令直接下载到Linux: wget https://downloads.apache.org/zookeeper/stable/apache-zookeeper-3.5.8-bin.tar.gz 

或者直接下载到本地传输给Linux: https://downloads.apache.org/zookeeper/stable/apache-zookeeper-3.5.8-bin.tar.gz 

安装:

解压Zookeeper的Tar包文件: tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz 

 

其他准备

远程访问时注意关闭防火墙拦截: systemctl stop firewalld 

不放心就检查一下防火墙状态: systemctl status firewalld 

查看Linux的IP地址,保证远程访问的正常: ifconfig / ip addr 

测试Ping本机连接: ping 192.168.2.174( 你的WindowsIP ) 

 

回到本机,开始模块编写

1、新建模块,模块名称: Provider-Payment-Zookeeper-Port-8004

2、导入该模块需要的依赖:

<dependencies>
    <dependency>
        <groupId>cn.dzz.springcloud</groupId>
        <artifactId>API-Commons</artifactId>
        <version>${project.version}</version> <!--<version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</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>

编写application.yml:

server:
  port: 8004

spring:
  application:
    name: provider-payment-service
  cloud:
    zookeeper:
      connect-string: 你的ZK所在的IP地址:2181

编写主程序启动类:

 1 package cn.dzz.springcloud;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 6 
 7 /**
 8  * @author DaiZhiZhou
 9  * @file SpringCloud-ATGG-2020
10  * @create 2020-08-26 10:09
11  */
12 @SpringBootApplication
13 @EnableDiscoveryClient
14 public class ProviderPaymentZookeeperServicePort8004 {
15 
16     public static void main(String[] args) {
17         SpringApplication.run(ProviderPaymentZookeeperServicePort8004.class, args);
18     }
19 }

编写一个流水订单的控制器:

 1 package cn.dzz.springcloud.controller;
 2 import lombok.extern.slf4j.Slf4j;
 3 import org.springframework.beans.factory.annotation.Value;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RestController;
 6 
 7 import java.util.UUID;
 8 
 9 /**
10  * @author DaiZhiZhou
11  * @file SpringCloud-ATGG-2020
12  * @create 2020-08-26 10:11
13  */
14 @RestController
15 @Slf4j
16 @RequestMapping("payment")
17 public class PaymentController {
18     
19     @Value("${server.port}")
20     private String serverPort;
21     
22     @RequestMapping("zk")
23     public String paymentZookeeper(){
24         return "SpringCloud with Zookeeper : " + serverPort + "\t" + UUID.randomUUID().toString(); 
25     }
26     
27 }

启动Zookeeper

发现3.5.8的ZK配置文件没有直接配置,我们需要复制重命名一份才可以启动:

切换conf配置目录: cd /root/apache-zookeeper-3.5.8-bin/conf 

复制配置文件: cp -r zoo_sample.cfg zoo.cfg 

切换到Bin目录下面: cd /root/apache-zookeeper-3.5.8-bin/bin 

启动ZK服务: ./zkServer.sh start 

使用ZK客户端访问: ./zkCli.sh 

可以看到默认的端口是2181

/usr/bin/java
Connecting to localhost:2181

查看ZK下面的节点:

然后启动8004服务运行测试:

虽然我的服务启动正常,但是视频中出现了ZK版本不一致导致的问题。

 

解决版本冲突问题就是排除依赖版本,导入指定的依赖版本

 1 <dependency>
 2     <groupId>org.springframework.cloud</groupId>
 3     <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
 4     <exclusions>
 5         <exclusion>
 6             <groupId>org.apache.zookeeper</groupId>
 7             <artifactId>zookeeper</artifactId>
 8         </exclusion>
 9     </exclusions>
10 </dependency>
11 <dependency>
12     <groupId>org.apache.zookeeper</groupId>
13     <artifactId>zookeeper</artifactId>
14     <version>3.5.8</version>
15 </dependency>

 

现在测试接口:

http://localhost:8004/payment/zk
SpringCloud with Zookeeper : 8004 f9b005f6-0a21-4cc2-a195-1cf8f59ed0e2

访问测试是成功的,每一次访问接口,序列号都会不一样

 

在Linux的ZK客户端中,我们这样访问节点:

ls /services/provider-payment-service

显示:

获取节点的详细信息:

get /services/provider-payment-service/f5358aa6-6846-40d2-a781-79785d9d0b93

可以看到返回的是一个JSON字符串:

格式化之后的样子:

{
    "name": "provider-payment-service",
    "id": "f5358aa6-6846-40d2-a781-79785d9d0b93",
    "address": "localhost",
    "port": 8004,
    "sslPort": null,
    "payload": {
        "@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
        "id": "application-1",
        "name": "provider-payment-service",
        "metadata": {}
    },
    "registrationTimeUTC": 1598408815125,
    "serviceType": "DYNAMIC",
    "uriSpec": {
        "parts": [{
            "value": "scheme",
            "variable": true
        }, {
            "value": "://",
            "variable": false
        }, {
            "value": "address",
            "variable": true
        }, {
            "value": ":",
            "variable": false
        }, {
            "value": "port",
            "variable": true
        }]
    }
}

 

到这里就算成功注册了服务到Zookeeper中

 

posted @ 2020-08-26 10:50  emdzz  阅读(217)  评论(0)    收藏  举报