Zookeeper 实战 | Zookeeper 和Spring Cloud相结合解决分布式锁、服务注册与发现、配置管理

news2024/9/28 21:22:14

专栏集锦,大佬们可以收藏以备不时之需:

Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9

Python 专栏:http://t.csdnimg.cn/hMwPR

Redis 专栏:http://t.csdnimg.cn/Qq0Xc

TensorFlow 专栏:http://t.csdnimg.cn/SOien

Logback 专栏:http://t.csdnimg.cn/UejSC

量子计算:

量子计算 | 解密著名量子算法Shor算法和Grover算法

AI机器学习实战:

AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析

AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别

Python实战:

Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别

Spring Cloud实战:

Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

Spring Cloud 实战 | 解密Feign底层原理,包含实战源码

Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码

1024程序员节特辑文章:

1024程序员狂欢节特辑 | ELK+ 协同过滤算法构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力

1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | OKR VS KPI谁更合适?

1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作

Spring实战系列文章:

Spring实战 | Spring AOP核心秘笈之葵花宝典

Spring实战 | Spring IOC不能说的秘密?

国庆中秋特辑系列文章:

国庆中秋特辑(八)Spring Boot项目如何使用JPA

国庆中秋特辑(七)Java软件工程师常见20道编程面试题

国庆中秋特辑(六)大学生常见30道宝藏编程面试题

国庆中秋特辑(五)MySQL如何性能调优?下篇

国庆中秋特辑(四)MySQL如何性能调优?上篇

国庆中秋特辑(三)使用生成对抗网络(GAN)生成具有节日氛围的画作,深度学习框架 TensorFlow 和 Keras 来实现

国庆中秋特辑(二)浪漫祝福方式 使用生成对抗网络(GAN)生成具有节日氛围的画作

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

在这里插入图片描述

目录

  • 1、Zookeeper 详细介绍
  • 2、Zookeeper 和 Spring Cloud 结合

1、Zookeeper 详细介绍

Zookeeper 是一个开源的分布式协调服务,它起源于 Google 的 Chubby 项目,并成为 Hadoop 分布式系统的基础组件。Zookeeper 提供了一组简单的原语集,分布式应用程序可以基于这些原语实现同步服务、配置维护和命名服务等。
Zookeeper 主要角色是协调器(Controller)和客户端(Client)。协调器负责管理分布式应用的逻辑,客户端则用于与协调器进行交互。在分布式应用中,通常需要一个主控节点(Controller)来管理其他物理分布的子进程。Zookeeper 提供了通用的分布式锁服务,以协调分布式应用的执行。
Zookeeper 具有以下特点:

  1. 简单:Zookeeper 的设计遵循简单性原则,易于理解和使用。
  2. 富有表现力:Zookeeper 提供了一种灵活的客户端 API,允许开发者根据需要实现自定义操作。
  3. 高可用性:Zookeeper 支持集群部署,可以自动发现故障节点并重新选举控制器,确保系统正常运行。
  4. 松耦合交互方式:Zookeeper 采用事件驱动机制,各组件之间通过消息传递进行通信,便于扩展和集成。
  5. 资源库:Zookeeper 存储和管理分布式应用的配置、状态等信息,便于应用程序的开发和维护。
    Zookeeper 的客户端主要通过 Java 语言编写,以下是一个简单的 Zookeeper 客户端示例:
import org.apache.zookeeper.*;
public class ZookeeperClient {
    private static ZooKeeper zooKeeper;
    static {
        try {
            // 创建 ZooKeeper 实例
            zooKeeper = new ZooKeeper("127.0.0.1:2181", 5000, new Watcher() {
                @Override
                public void process(WatchedEvent event) {
                    System.out.println("事件:" + event);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws Exception {
        // 创建临时顺序节点
        String path = "/my_app/config";
        byte[] data = "我的配置信息".getBytes();
        CreateMode createMode = CreateMode.EPHEMERAL_SEQUENTIAL;
        zooKeeper.create(path, data, createMode);
        // 获取节点信息
        Stat stat = new Stat();
        byte[] result = zooKeeper.getData(path, false, stat);
        System.out.println("节点数据:" + new String(result));
        // 删除节点
        zooKeeper.delete(path, -1);
    }
}

在这个示例中,我们首先创建了一个 ZooKeeper 实例,然后创建了一个临时顺序节点,并获取其数据。最后,删除了这个节点。
需要注意的是,这个示例仅用于说明 Zookeeper 客户端的基本用法。在实际应用中,您需要根据具体需求编写更复杂的代码来处理分布式协调任务。

2、Zookeeper 和 Spring Cloud 结合

Zookeeper 和 Spring Cloud 结合后,可以应用于各种需要分布式协调、服务治理、配置管理等功能的场景。以下是一些具体的应用场景和代码示例:
在您的 Spring Boot 项目的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-zookeeper</artifactId>
</dependency>
  1. 服务注册与发现
    使用 Zookeeper 作为服务注册中心,可以方便地实现服务注册与发现。以下是一个简单的使用示例:
    服务提供者:
@Service
public class YourService {
    // ...
}

服务消费者:

@RestController
public class YourController {
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/your-service/{version}")
    public String getYourService(@PathVariable String version) {
        // 通过 RestTemplate 调用服务提供者
        return restTemplate.getForObject("http://localhost:8002/your-service/" + version, YourService.class);
    }
}

配置文件:

spring.application.name=your-service-provider
spring.cloud.zookeeper.connect-string=localhost:2181
  1. 分布式锁
    使用 Zookeeper 实现分布式锁,可以确保在多个节点上执行同一操作的并发控制。以下是一个简单的使用示例:
    服务类:
@Service
public class YourService {
    @Autowired
    private CuratorFramework curatorFramework;
    public void doSomething() {
        // 创建分布式锁
        Lock lock = curatorFramework.getZookeeperClient().createLock("/your-lock", "your-lock", 0, CreateMode.EPHEMERAL);
        try {
            // 等待获取锁
            if (lock.acquire(10000, TimeUnit.MILLISECONDS)) {
                try {
                    // 获取锁后执行具体业务
                    // ...
                } finally {
                    // 释放锁
                    lock.release();
                }
            } else {
                // 未获取到锁,执行其他操作
                // ...
            }
        } catch (InterruptedException e) {
            // 等待获取锁时发生异常,可以进行重试或其他处理
            // ...
        }
    }
}

配置文件:

spring.application.name=your-service-provider
spring.zookeeper.connect-string=localhost:2181
  1. 配置管理
    使用 Zookeeper 实现配置管理,可以提高配置的可靠性和易维护性。以下是一个简单的使用示例:
    配置类:
@ConfigurationProperties(prefix = "your.config")
public class YourConfig {
    private String value;
    // getter 和 setter
}

配置文件:

<bean id="curatorFramework" class="org.springframework.cloud.zookeeper.core.ZookeeperClientFactoryBean">
    <property name="connectString" value="localhost:2181"/>
</bean>
<bean id="yourConfig" class="org.springframework.beans.factory.config.ConfigurableBeanFactoryLocator">
    <property name="factory" ref="curatorFramework"/>
</bean>
<bean id="yourConfigService" class="org.springframework.beans.factory.config.ConfigServiceBean">
    <property name="locator" ref="yourConfig"/>
</bean>

以上示例中,通过使用 Spring Cloud 和 Zookeeper,可以实现分布式锁、服务注册与发现、配置管理等功能,从而提高整个分布式系统的性能和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1262267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Emeya散发的时代之光,似乎正盖过Panamera的余晖

路特斯Emeya的首秀象征着在超豪华汽车领域&#xff0c;纯电与超跑轿车的绝美融合正式拉开序幕。自由与灵感的碰撞&#xff0c;诗意与理想的贯通&#xff0c;汽车工业的性感似乎在Emeya上出现了全新的表达。 但短短不到一周的时间&#xff0c;我们又见到了全新Panamera的首秀。…

四招心理博弈术,让别人不敢欺负你,敬你三分

教你四招心理博弈术&#xff0c;让别人不敢欺负你&#xff0c;无论在职场中还是跟朋友交往中&#xff0c;为什么总是有人敢欺负你呢&#xff0c;是因为你不懂得人性博弈。其本质原因&#xff0c;是你做人没有边界感&#xff0c;或者没有原则&#xff0c;即便你有原则&#xff0…

【APUE】进程间通信

目录 一、管道 1.1 匿名管道 1.2 命名管道 二、XSI IPC 2.1 概述 2.2 消息队列 2.2.1 msgget 2.2.2 msgsnd 2.2.3 msgrcv 2.2.4 msgctl 2.2.5 代码示例 2.3 信号量数组 2.3.1 semget 2.3.2 semop 2.3.3 semctl 2.3.4 代码示例 2.3 共享内存 2.3.1 shmget…

服务器如何做好入侵防护

不管是企业还是个人&#xff0c;网上业务都需要依赖于服务器&#xff0c;服务器一旦被黑客入侵&#xff0c;企业会面临很多安全风险&#xff0c;比如业务被中断、数据被窃取、被加密勒索、服务器不稳定等影响。入侵防护&#xff0c;主机安全也是目前网络安全防护的一个重点。关…

碳酸氢锂/硫酸锂溶液纯化除钙镁解决方案

碳酸锂是锂电行业阳极生产中的一个重要原材料&#xff0c;主要用于制造钴酸锂、镍酸锂、锰酸锂等电极材料&#xff0c;也用于充电 锂电池中作非水溶液电解质等&#xff0c;具有良好的电化学性能&#xff0c;应用领域还在不断扩大。工业级碳酸锂主含量&#xff08;Li2CO3&#x…

idea创建spring boot项目,java版本只能选择17和21

1.问题描述 java版本为"11.0.20"&#xff0c;idea2023创建spring boot项目时&#xff08;File->Project->Spring Initializr&#xff09;&#xff0c;java版本无法选择11&#xff0c;导致报错&#xff0c;如下图所示&#xff1a; 2.原因 spring2.X版本在2023…

java设计模式学习之【抽象工厂模式】

文章目录 引言抽象工厂模式简介定义与用途实现方式&#xff1a; 使用场景优势与劣势抽象工厂模式在spring中的应用银行和贷款服务示例代码地址 引言 在我们之前的讨论中&#xff0c;我们探索了工厂方法模式——一种简化单一产品创建的设计模式。现在&#xff0c;我们将视角转向…

QT linux下应用程序打包

一、应用程序app 1、应用程序的pro文件 2、 程序工作函数 3、app的UI界面 二、动态库lib 1、Lib类头文件 2、.cpp文件 三、对应用程序和动态库进行构建 1、对动态库进行qmake,然后进行构建 2、对应用程序进行qmake&#xff0c;然后进行构建 3、查看构建目录 四、编写脚本 …

零基础学编程轻松学编程,分享一款中文编程工具,编程构件简介

零基础学编程轻松学编程&#xff0c;分享一款中文编程工具&#xff0c;编程构件简介 中文编程开发语言工具编辑区界面截图如上图。 给大家分享一款中文编程工具 零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#…

Mac苹果视频剪辑:Final Cut Pro Mac

Final Cut Pro是一款由Apple公司开发的专业视频非线性编辑软件&#xff0c;是业界著名的视频剪辑软件之一。它最初发布于1999年&#xff0c;是Mac电脑上的一款独占软件。Final Cut Pro具有先进的剪辑工具、丰富的特效和颜色分级、音频处理等功能&#xff0c;使得用户可以轻松地…

Java后端开发——MVC商品管理程序

Java后端开发——MVC商品管理程序 本篇文章内容主要有下面几个部分&#xff1a; MVC架构介绍项目环境搭建商品管理模块Servlet代码重构BaseServlet文件上传 MVC 是模型-视图-控制器&#xff08;Model-View-Controller&#xff09;&#xff0c;它是一种设计模式&#xff0c;也…

打破限制!MySQL 5.7至8.0跨版本迁移,1分钟搞定多版本数据迁移

在上个月&#xff0c;MySQL 5.7 正式结束了生命周期&#xff0c;即EOL&#xff08;End of Life&#xff09;&#xff0c;意味着Oracle将不再为 MySQL 5.7 提供技术支持&#xff0c;包括Bug修复或安全漏洞&#xff0c;大大增加了使用数据库的风险。在全球关系型数据库市场中&…

WinMerge使用教程,WinMerge下载

一、下载 官方下载 WinMerge - You will see the difference… 官方地址&#xff1a;https://winmerge.org/ 阿里云盘下载 文件内容对比工具WinMerge2.16.25.25 https://www.alipan.com/s/r7MzudB235x 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘…

Webpack——Webpack简介

1、什么是Webpack&#xff1f; Webpack是一个开源的JavaScript模块打包工具&#xff0c;其最核心的功能是解决模块之间的依赖&#xff0c;把各个模块按照特定的规则和顺序组织在一起&#xff0c;最终合并为一个JS文件&#xff08;有时会有多个&#xff0c;这里讨论的只是最基本…

【Cisco Packet Tracer】构造超网

​​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《Cisco Packet Tracer | 奇遇记》⏰寄 语&#xff1a;风翻云浪激&#xff0c;剑舞星河寂。 临风豪情壮志在&#xff0c;拨云见日昂首立。 目录 ⛳️1. Cisco Packet Trace…

【JavaEE初阶】 HTTP协议和使用Fiddler抓包

文章目录 &#x1f38d;HTTP协议是什么&#xff1f;&#x1f340;应用层协议&#xff08;HTTP&#xff09;存在的意义&#x1f384;HTTP 协议的工作过程&#x1f334;HTTP 协议格式&#x1f333;Fiddler抓包工具的使用&#x1f6a9;如何抓HTTPS的包&#xff1f; &#x1f38b;抓…

影刀实例二,小某书如何持续下载图片

一&#xff0c;案例背景&#xff1a; 小某书平台&#xff0c;利用影刀rpa搜索关键词&#xff0c;然后下载对应文章的图片. 二&#xff0c;思路 1. 登录小某书平台&#xff0c;将网页放大最大【手动完成&#xff0c;作为初始状态】 2. 利用影刀命令【打开输入对话框】获得要搜索…

如何解决中小制造业企业信息化难题?

中小企的信息化&#xff0c;难&#xff01; 一、中小制造业企业信息化困难的原因主要有以下几点&#xff1a; 资金限制&#xff1a;中小制造业企业相对于大型企业来说资金有限&#xff0c;无法投入大量资金进行信息化建设。技术水平不足&#xff1a;中小制造业企业缺乏专业的…

分享一款4G低功耗摄像头接入物联网平台解决方案

首先介绍硬件方案&#xff1a; 应用场景-4G低功耗摄像头 该方案中&#xff0c;Module为G8100B&#xff08;4G模块&#xff09;&#xff0c;HOST为海思摄像头(Linux or LiteOS)&#xff0c;G8100B的USB可以在Host端虚拟出串口和网卡&#xff0c;G8100B符合以下条件进入休眠&…

基于单片机的大棚温湿度检测系统(论文+源码)

1. 系统设计 本课题主要开发一个大棚温湿度检测系统、其功能要求如下&#xff1a; 1.实现大棚温室环境的空气中的温湿度检测&#xff1b; 2.当检测到的土壤湿度低于阈值时&#xff0c;模拟水泵进行浇水&#xff0c;湿度太高则进行干燥&#xff1b; 4. 当检测到环境的温度太…