栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spring Cloud 学习笔记之——03 Zookeeper服务注册与发现

Spring Cloud 学习笔记之——03 Zookeeper服务注册与发现

目录

Zookeeper 介绍

创建 cloud-provider-payment8004 模块作为注册进 Zookeeper 的支付模块

创建 cloud-consumerzk-order80 模块作为注册进 Zookeeper 的消费者


Eureka 停止更新,我们可以采用 Zookeeper 来实现服务注册与发现功能,上图来自于

Home · Netflix/eureka Wiki · GitHub

Zookeeper 介绍

Zookeeper 是一个分布式协调工具,可以实现注册中心功能, 官网链接 ZooKeeper

安装 Zookeeper 软件在阿里云服务器中,启动 Zookeeper 软件

# 跳转到 Zookeeper 的 bin 目录下
cd /usr/local/zookeeper/apache-zookeeper-3.6.3-bin/bin/


# 打开 zkServer.sh
./zkServer.sh start


# 打开客户端 zkCli.sh
./zkCli.sh

创建 cloud-provider-payment8004 模块作为注册进 Zookeeper 的支付模块

1、创建一个普通的maven 项目,添加POM 依赖

  
        
            com.atyixuan
            cloud-api-commons
            1.0-SNAPSHOT
        


        
            org.springframework.boot
            spring-boot-starter-web
        


        
            org.springframework.boot
            spring-boot-starter-actuator
        

        
        
        
            org.springframework.cloud
            spring-cloud-starter-zookeeper-discovery
        


        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        


        
            org.projectlombok
            lombok
            true
        


        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

2、application.yml 配置

server:
  port: 8004

spring:
  application:
    # 微服务名称
    name: cloud-provider-payment
  cloud:
    zookeeper:
      # ip地址:端口号
      connect-string: 服务器ip地址:2181

3、主启动类 com.atyixuan.springboot.PaymentMain8004

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8004 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8004.class, args);
    }
}

4、com.atyixuan.springboot.controller.PaymentController

import java.util.UUID;

@Slf4j
@RestController
public class PaymentController {

    @Value("{server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/zk")
    public String paymentzk(){
        return "spring cloud with zookeeper:"+serverPort+"t"+ UUID.randomUUID().toString();
    }
}

5、测试:

# 启动 zkCli.sh 查询 zookeeper 当前的服务
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]

启动微服务 cloud-provider-payment8004

[zk: localhost:2181(CONNECTED) 5] ls /
[services, zookeeper]

[zk: localhost:2181(CONNECTED) 6] ls /services/cloud-provider-payment
[0251d150-d0ee-4b4b-8a0b-30b645d38ecc]

[zk: localhost:2181(CONNECTED) 7] get /services/cloud-provider-payment/0251d150-d0ee-4b4b-8a0b-30b645d38ecc 
{"name":"cloud-provider-payment","id":"0251d150-d0ee-4b4b-8a0b-30b645d38ecc","address":"PC-20210716NCEQ","port":8004,"sslPort":null,"payload":{"@class":"org.springframework.cloud.zookeeper.discovery.ZookeeperInstance","id":"application-1","name":"cloud-provider-payment","metadata":{}},"registrationTimeUTC":1641916167230,"serviceType":"DYNAMIC","uriSpec":{"parts":[{"value":"scheme","variable":true},{"value":"://","variable":false},{"value":"address","variable":true},{"value":":","variable":false},{"value":"port","variable":true}]}}

将上述 get 的结果复制到  json 解码工具:json工具 - 在线工具 中进行解码,解码的结果

在浏览器中输入 http://localhost:8004/payment/zk

Zookeeper 的服务节点是临时的,没有Eureka 的自我保护机制,如果失去心跳包就会清楚掉注册进的微服务。

创建 cloud-consumerzk-order80 模块作为注册进 Zookeeper 的消费者

创建 cloud-consumerzk-order80让消费者也注册进 Zookeeper 中去

1、POM 文件:

    
        
            com.atyixuan
            cloud-api-commons
            1.0-SNAPSHOT
        


        
            org.springframework.boot
            spring-boot-starter-web
        


        
            org.springframework.boot
            spring-boot-starter-actuator
        


        
        
            org.springframework.cloud
            spring-cloud-starter-zookeeper-discovery
        


        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        


        
            org.projectlombok
            lombok
            true
        


        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

2、YML 文件

server:
  port: 80

spring:
  application:
    # 微服务名称
    name: cloud-consumer-order
  cloud:
    zookeeper:
      # ip地址:端口号
      connect-string: ip 地址:2181

3、主启动类 atyixuan.springboot.OrderZKMain80

@SpringBootApplication
@EnableDiscoveryClient
public class OrderZKMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderZKMain80.class, args);
    }
}

4、业务类:

4.1、Bean atyixuan.springboot.config.ApplicationContextConfig

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

4.2、atyixuan.springboot.controller.OrderZKController

@Slf4j
@RestController
public class OrderZKController {
    public static final String INVOKE_URL = "http://cloud-provider-payment";

    @Resource
    private RestTemplate restTemplate;
    
    @GetMapping(value = "/consumer/payment/zk")
    public String paymentInfo() {
        return restTemplate.getForObject(INVOKE_URL + "/payment/zk", String.class);
    }
}

项目结构图

5、测试

先启动 cloud-provider-payment8004,再启动 cloud-consumerzk-order80

浏览器中输入:http://localhost/consumer/payment/zk

 浏览器输入:http://localhost:8004/payment/zk

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/710453.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号