【服务注册】Zookeeper

简介

Zookeeper 是一个分布式协调工具,可以实现注册中心功能。

安装

# docker 下载
docker pull zookeeper:3.4.9
# docker 启动 zookeepr
docker run -d -p 2181:2181 --name some-zookeeper --restart always zookeeper:3.4.9

生产者

新建cloud-provider-payment8004

POM

因为Zookeeper版本为3.4.9,jar的版本3.5.3有冲突。所以需要排除。

<?xml version="1.0" encoding="UTF-8"?>  
<project xmlns="http://maven.apache.org/POM/4.0.0"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
   <modelVersion>4.0.0</modelVersion>  
   <parent>        
       <groupId>com.atguigu.springcloud</groupId>  
       <artifactId>ssc</artifactId>  
       <version>1.0-SNAPSHOT</version>  
   </parent>  
   <artifactId>cloud-provider-payment8004</artifactId>  
 
   <properties>        
       <maven.compiler.source>8</maven.compiler.source>  
       <maven.compiler.target>8</maven.compiler.target>  
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
   </properties>    
   <dependencies>        
       <dependency>            
   	    <groupId>org.springframework.boot</groupId>  
           <artifactId>spring-boot-starter-web</artifactId>  
       </dependency>        
       <dependency>            
   	    <groupId>org.springframework.boot</groupId>  
           <artifactId>spring-boot-starter-actuator</artifactId>  
       </dependency>        
       <!--Zookeeper -->  
       <dependency>  
           <groupId>org.springframework.cloud</groupId>  
           <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>  
       <!-- 先排除自带的zookeeper 3.5.3 -->  
           <exclusions>  
               <exclusion>                    
                   <groupId>org.apache.zookeeper</groupId>  
                   <artifactId>zookeeper</artifactId>  
               </exclusion>            
           </exclusions>        
       </dependency>        
   <!--添加Zookeeper 3.4.9-->  
       <dependency>  
           <groupId>org.apache.zookeeper</groupId>  
           <artifactId>zookeeper</artifactId>  
           <version>3.4.9</version>  
       </dependency>        
       <dependency>            
   		<groupId>com.atguigu.springcloud</groupId>  
           <artifactId>cloud-api-commons</artifactId>  
           <version>${project.version}</version>  
       </dependency>        
       <dependency>            
   	    <groupId>org.mybatis.spring.boot</groupId>  
           <artifactId>mybatis-spring-boot-starter</artifactId>  
       </dependency>        
       <dependency>            
   	    <groupId>com.alibaba</groupId>  
           <artifactId>druid-spring-boot-starter</artifactId>  
           <version>1.1.10</version>  
       </dependency>        
   <!--mysql-connector-java-->  
       <dependency>  
           <groupId>mysql</groupId>  
           <artifactId>mysql-connector-java</artifactId>  
       </dependency>        
   <!--jdbc-->  
       <dependency>  
           <groupId>org.springframework.boot</groupId>  
           <artifactId>spring-boot-starter-jdbc</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>        
       <dependency>            
   	    <groupId>org.springframework</groupId>  
           <artifactId>spring-beans</artifactId>  
       </dependency>        
       <dependency>            
   	    <groupId>org.springframework</groupId>  
           <artifactId>spring-web</artifactId>  
       </dependency>        
       <dependency>            
   	    <groupId>org.springframework</groupId>  
           <artifactId>spring-web</artifactId>  
       </dependency>    
   </dependencies>
</project>

YML

#8004表示注册到zookeeper服务器的支付服务提供者端口号  
server:  
  port: 8004  
  
spring:  
  application:  
    name: cloud-payment-service  
  datasource:  
    type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型  
    driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包 com.mysql.jdbc.Driver    
    url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false  
    username: root  
    password: 123456  
  cloud:  
    zookeeper:  
      connect-string: 172.16.80.95:2181

编写类

package com.atguigu.springcloud;  
  
  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
  
@SpringBootApplication  
@EnableDiscoveryClient //该注解用于向使用consul或者Zookeeper作为注册中心时注册服务。  
public class PaymentMain8004 {  
    public static void main(String[] args) {  
        SpringApplication.run(PaymentMain8004.class,args);  
    }  
}
package com.atguigu.springcloud.controller;  
  
import lombok.extern.slf4j.Slf4j;  
import org.springframework.beans.factory.annotation.Value;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RestController;  
  
import java.util.UUID;  
  
@RestController  
@Slf4j  
public class PaymentController {  
  
    @Value("${server.port}")  
    private  String port;  
  
    @GetMapping(value = "/payment/zk")  
    public String paymentZk(){  
        return  "springCloud with zookeeper:"+ port +"\t"+ UUID.randomUUID().toString();  
    }  
  
}

消费者

新建 cloud-consumerzk-order80

POM

<?xml version="1.0" encoding="UTF-8"?>  
<project xmlns="http://maven.apache.org/POM/4.0.0"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
    <modelVersion>4.0.0</modelVersion>  
    <parent>        <groupId>com.atguigu.springcloud</groupId>  
        <artifactId>ssc</artifactId>  
        <version>1.0-SNAPSHOT</version>  
    </parent>  
    <artifactId>cloud-consumerzk-order80</artifactId>  
  
    <properties>        
	    <maven.compiler.source>8</maven.compiler.source>  
        <maven.compiler.target>8</maven.compiler.target>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    </properties>  
    <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>
</project>

YML

#8004表示注册到zookeeper服务器的支付服务提供者端口号  
server:  
  port: 8004  
  
spring:  
  application:  
    name: cloud-payment-service  
  datasource:  
    type: com.alibaba.druid.pool.DruidDataSource            
    # 当前数据源操作类型  
    driver-class-name: org.gjt.mm.mysql.Driver             
    # mysql驱动包 com.mysql.jdbc.Driver    
    url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false  
    username: root  
    password: 123456  
  cloud:  
    zookeeper:  
      connect-string: 172.16.80.95:2181

编写类

主启动

package com.atguigu.springcloud;  
  
  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
@SpringBootApplication  
public class OrderZK80 {  
    public static void main(String[] args) {  
        SpringApplication.run(OrderZK80.class,args);  
    }  
}

业务类

config

package com.atguigu.springcloud.config;  
  
  
import org.springframework.cloud.client.loadbalancer.LoadBalanced;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.web.client.RestTemplate;  
  
@Configuration  
public class ApplicationContextConfig  
{  
  
    @Bean  
    @LoadBalanced    public RestTemplate getRestTemplate(){  
        return  new RestTemplate();  
    }  
}

controller

package com.atguigu.springcloud.controller;  
  
import lombok.extern.slf4j.Slf4j;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RestController;  
import org.springframework.web.client.RestTemplate;  
  
import javax.annotation.Resource;  
  
@RestController  
@Slf4j  
public class OrderZkController {  
  
    public static final String INVOKE_URL = "http://cloud-payment-service";  
  
    @Resource  
    private RestTemplate restTemplate;  
  
    @GetMapping(value = "/consumer/payment/zk")  
    public  String paymentInfo(){  
        String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);  
        return  result;  
    }  
}

查看Zookeeper注册

1、进入docker容器

docker exec -it some-zookeeper /bin/bash

2、进入Zookeeper的bin目录

cd bin/

3、执行 ./zkCli.sh

./zkCli.sh 
# 输出:
Connecting to localhost:2181
2023-03-10 08:58:39,680 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT
2023-03-10 08:58:39,682 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=e16e6319c6e8
2023-03-10 08:58:39,683 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_121
2023-03-10 08:58:39,684 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2023-03-10 08:58:39,684 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.8-openjdk/jre
2023-03-10 08:58:39,684 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/zookeeper-3.4.9/bin/../build/classes:/zookeeper-3.4.9/bin/../build/lib/*.jar:/zookeeper-3.4.9/bin/../lib/slf4j-log4j12-1.6.1.jar:/zookeeper-3.4.9/bin/../lib/slf4j-api-1.6.1.jar:/zookeeper-3.4.9/bin/../lib/netty-3.10.5.Final.jar:/zookeeper-3.4.9/bin/../lib/log4j-1.2.16.jar:/zookeeper-3.4.9/bin/../lib/jline-0.9.94.jar:/zookeeper-3.4.9/bin/../zookeeper-3.4.9.jar:/zookeeper-3.4.9/bin/../src/java/lib/*.jar:/conf:
2023-03-10 08:58:39,684 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64:/usr/lib/jvm/java-1.8-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2023-03-10 08:58:39,684 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2023-03-10 08:58:39,684 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2023-03-10 08:58:39,685 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2023-03-10 08:58:39,685 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2023-03-10 08:58:39,685 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=3.10.0-229.4.2.el7.x86_64
2023-03-10 08:58:39,685 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2023-03-10 08:58:39,685 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2023-03-10 08:58:39,685 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/zookeeper-3.4.9/bin
2023-03-10 08:58:39,686 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@69d0a921
Welcome to ZooKeeper!
2023-03-10 08:58:39,708 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2023-03-10 08:58:39,756 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@876] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
2023-03-10 08:58:39,772 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x186ca4a935e0002, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

4、然后执行ls /services

ls /services
[cloud-payment-service, cloud-consumer-order]
[zk: localhost:2181(CONNECTED) 1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值