【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中
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号