首页 > 其他分享 >微服务 – Spring Cloud –zookeeper

微服务 – Spring Cloud –zookeeper

时间:2023-06-21 19:02:55浏览次数:31  
标签:Spring zookeeper 节点 public cloud docker payment Cloud

微服务 – Spring Cloud –zookeeper

zookeeper 简介

ZooKeeper是一个集中式服务,用于维护配置信息、命名、提供分布式同步、提供组服务. 支持高度可靠的分布式协调.

zookeeper 数据模型和分层命名空间

zookeeper 数据模型: 其实就是用来存储和处理数据的。类似于数据库系统。不过 zookeeper 的数据模型更像电脑中的文件系统,有一个根文件夹(固定的根节点 / ),下面有很多字文件夹(可以在根节点创建多个子节点,支持逐级创建)

zookeeper.png

zookeeper 节点和临时节点

与标准文件系统不同,ZooKeeper 命名空间中的每个节点都可以具有与其关联的数据以及子节点。这就像拥有一个允许文件也成为目录的文件系统。(ZooKeeper 被设计用来存储协调数据:状态信息、配置、位置信息等,因此每个节点存储的数据通常很小,在字节到千字节范围内。)我们使用术语 znode 来明确我们正在谈论 ZooKeeper 数据节点。

Znode 维护一个统计结构,其中包括数据更改的版本号、ACL 更改和时间戳,以允许缓存验证和协调更新。每次 znode 的数据更改时,版本号都会增加。例如,每当客户端检索数据时,它也会收到数据的版本。

存储在命名空间中每个 znode 的数据是原子读取和写入的。读取获取与 znode 关联的所有数据字节,写入替换所有数据。每个节点都有一个访问控制列表 (ACL),用于限制谁可以做什么。

ZooKeeper 也有临时节点的概念。只要创建 znode 的会话处于活动状态,这些 znode 就会存在。当会话结束时,znode 将被删除。

zookeeper API

  • create:在树中的某个位置创建一个节点
  • 删除:删除一个节点
  • 存在:测试某个位置是否存在节点
  • 获取数据:从节点读取数据
  • 设置数据:将数据写入节点
  • get children:检索节点的子节点列表
  • sync:等待数据传播

zookeeper 安装以及可视化界面安装

1、创建 zookeeper 安装目录,保存 zookeeper 相关内容

mkdir $HOME/docker/zookeeper

2、拉取 zookeeper 镜像

docker search zookeeper    
docker pull zookeeper:latest 

3、创建zookeeper 数据挂在目录

mkdir -p $HOME/docker/zookeeper/data
mkdir -p $HOME/docker/zookeeper/conf
mkdir -p $HOME/docker/zookeeper/logs

4、安装,并挂载数据卷到宿主机

docker run -d \
--name zookeeper \
--privileged=true \
-p 2181:2181 \
--restart=always \
-v $HOME/docker/zookeeper/data:/data \
-v $HOME/docker/zookeeper/conf:/conf \
-v $HOME/docker/zookeeper/logs:/datalog \
zookeeper

5、查看安装结果

docker logs containerId

docker exec -it zookeeper /bin/bash ./bin/zkServer.sh status

docker exec -it zookeeper zkCli.sh

6、安装可视化界面

<a rel="nofollow" href="https://github.com/vran-dev/PrettyZoo/releases" target="_blank">PrettyZoo</a>

下载自己对应的版本即可

我的为 mac 版本。如果下载下来 显示文件以损坏。

解决:

sudo spctl --master-disable
sudo xattr -rc /Applications/prettyZoo.app

参考: https://github.com/vran-dev/PrettyZoo/blob/master/README_CN.md

zookeeper.png

spring cloud 注册服务到zookeeper

1、 新建子模块 cloud-payment

2、加入pom依赖

<!-- 整合 zookeeper客户端 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

3、配置文件 application.yaml

spring:
  application:
    name: cloud-payment-service
  cloud:
    zookeeper:
      connect-string: 127.0.0.1:2181

4、启动类

该注解用于向consul或者zookeeper注册中心注册服务使用

@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8004 {

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

}

5、查看服务是否注册进去

zookeeper-service.jpg

6、自测

编写接口

PaymentController.java

@RestController
public class PaymentController {

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

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

}

访问 localhost:8004/payment/zk

SpringCloud with zookeeper: 8004 e40a3dc5-0599-40de-9405-c588d24c98fe

Zookeeper 服务发现调用

新建一个子模块,order 服务。使用order 服务调用 payment服务的 /payment/zk 接口

pom.xml 引入 zookeeper依赖

<!-- 整合 zookeeper客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>

配置文件 application.yaml

server:
  port: 80

spring:
  application:
    name: cloud-consumenr-order-service

  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db2023?useUnicde=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456

  cloud:
    zookeeper:
      connect-string: 127.0.0.1:2181

启动类 ConsumnerZkOderMain80.java

@SpringBootApplication
@EnableDiscoveryClient
public class ConsumnerZkOderMain80 {

    public static void main(String[] args) {
        SpringApplication.run(ConsumnerZkOderMain80.class, args);
    }

}

配置文件类 ApplicationContextBean.java

@Configuration
public class ApplicationContextBean {

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


}

具体服务调用控制器 OderZkController.java

@RestController
@Slf4j
public class OderZkController {

   // cloud-payment-service 为 payment 服务在 zookeeper service 中的名称 
    public static final String INVOKE__URL = "http://cloud-payment-service";

    @Resource
    private RestTemplate restTemplate;

    @RequestMapping(value = "/consumer/payment/zk")
    public String paymentInfo() {
        String result = restTemplate.getForObject(INVOKE__URL + "/payment/zk", String.class);

        return result;
    }

}

访问 order 服务的 /consumer/payment/zk 在 order 服务的接口中,通过RestTemplate 来调用payement服务中的 /payment/zk接口

http://localhost/consumer/payment/zk

SpringCloud with zookeeper: 8004 39f4e027-ca57-40c5-a9f6-a26e1ca7e342

标签:Spring,zookeeper,节点,public,cloud,docker,payment,Cloud
From: https://blog.51cto.com/u_15524534/6530573

相关文章

  • 一日一技:如何捅穿Cloud Flare的5秒盾(转)
    经常写爬虫的同学,肯定知道CloudFlare的五秒盾。当你没有使用正常的浏览器访问网站的时候,它会返回如下这段文字:Checkingyourbrowserbeforeaccessingxxx.Thisprocessisautomatic.Yourbrowserwillredirecttoyourrequestedcontentshortly.Pleaseallowup......
  • 一日一技:【最新】再次突破CloudFlare五秒盾付费版(转)
    去年我写了一篇文章:一日一技:如何捅穿CloudFlare的5秒盾 ,这篇文章使用的第三方库『cloudscraper』可以绕过免费版的五秒盾。但遇到付费版就无能为力了。最近在爬币圈的网站,其中有一个网站叫做:Codebase使用的就是付费版的CloudFlare五秒盾。当我们使用CloudScraper去爬时,报错如下......
  • springboot 默认配置的线程池
     线程池的大小通常都是我们比较关注的,SpringBoot会为系统做默认配置。如果不清楚SpringBoot默认配置的线程池的大小的话,容易线上踩坑。最近碰到一个生产问题,线上部署6台机器,定时任务A,B都在17:00执行,执行时会各自先获取分布式锁。(服务器时间是一致的)理论上是可以做到同......
  • prometheus 监控 hadoop + Hbase + zookeeper + mysql exporter
    1. run JMX exporter as a java agent with all the four daemons. For this I have added EXTRA_JAVA_OPTS in hadoop-env.sh and yarn-env.sh :[root@cloud01hadoop]#catyarn-env.sh|egrep-v'^$|#'exportYARN_RESOURCEMANAGER_OPTS="$YARN_RESOURC......
  • springboot集成easyexcel实现导入导出
    1、添加依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency>2、controller/***基于Liste......
  • 用cloudmonkey批量创建虚拟机
    需求:1.root磁盘120G(这个在做镜像的时候已经做好)2.需要用到share网络3.添加500G磁盘并且挂载早虚拟机上面#!/bin/bashzone_id=d530fee4-413a-463b-abf5-4fdcf523077bnetwork_id=96eb15a6-ccd3-4e33-adf0-b5f3e63e2466serviceofferingid='b1fb445d-2571-4803-a3f5-93f0ad81b245't......
  • springboot简单依赖
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/......
  • springboot启动流程 (3) 自动装配
    在SpringBoot中,EnableAutoConfiguration注解用于开启自动装配功能。本文将详细分析该注解的工作流程。EnableAutoConfiguration注解启用SpringBoot自动装配功能,尝试猜测和配置可能需要的组件Bean。自动装配类通常是根据类路径和定义的Bean来应用的。例如,如果类路径上有tomcat-......
  • Jenkins部署前后端不分离springboot项目
    背景写这篇博客的时候我还是大学生,学校期末课程设计时要求使用Jenkins部署项目,所以使用windows,但是企业中都是使用linux,往往还会搭建一个gitlab。下面我介绍的是在window环境下使用jenkins部署项目,这阵子搞这个期末作业时感觉收获还是挺大的,专门记录下。持续集成(CI)持续集成......
  • 9. SpringMVC处理ajax请求
    9.1、@RequestBody@RequestBody可以获取请求体信息,使用@RequestBody注解标识控制器方法的形参,当前请求的请求体就会为当前注解所标识的形参赋值<!--此时必须使用post请求方式,因为get请求没有请求体--><formth:action="@{/test/RequestBody}"method="post"> 用户名:<inp......