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

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

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,可以实现分布式锁、服务注册与发现、配置管理等功能,从而提高整个分布式系统的性能和可靠性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS-Service服务开发(一)

文章目录 创建新项目启动Serviceets获取service的bundleName DataAbility开发指导开发Data步骤创建Data 创建新项目 ServiceAbility开发指导 在config.json中也有配置出现 启动Service ets获取service的bundleName 项目的bundleName service的bundleName 这里serviceAbil…

青少年CTF之PHP特性练习(1-5)

青少年CTF-PHP特性练习 文章目录 青少年CTF-PHP特性练习PHP特性01PHP特性02PHP特性03PHP特性04PHP特性05 PHP特性01 看给出的源码&#xff0c;两个变量的值加密后的MD5相同 <?php$s1 "%af%13%76%70%82%a0%a6%58%cb%3e%23%38%c4%c6%db%8b%60%2c%bb%90%68%a0%2d%e9%47…

Nacos整合实际应用案例

Nacos数据隔离模型 公司->命名空间->分组->服务 命名空间通常用于隔离不同微服务之间的配置 分组用于隔离相同微服务下不同环境的配置 版本对应关系 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 应用案例 <par…

easyExcel自定义导出,指定列,设置请求头背景色,加入合计行,设置合计行字体,背景色等等

效果图 1.引入easyExcel pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.1</version></dependency> 2.工具类-自定义样式handler-CustomCellWriteHandler import java.util…

GAN:DCGAN-深度卷积生成对抗网络

论文&#xff1a;https://arxiv.org/pdf/1511.06434.pdf 发表&#xff1a;ICLR 2016 一、架构创新 1&#xff1a;全卷积网络&#xff1a;用逐步卷积代替确定性的空间池化函数&#xff08;如maxpooling&#xff09;&#xff0c;使网络学习自己的空间下采样。使用这种方法&#…

【文献阅读笔记】关于GANomaly的异常检测方法

文章目录 1、GANomaly: Semi-Supervised Anomaly Detection via Adversarial Training模型主要创新 2、Skip-GANomaly: Skip Connected and AdversariallyTrained Encoder-Decoder Anomaly Detection模型主要创新点 3、Industrial surface defect detection and localization u…

15 网关实战: 微服务集成Swagger实现在线文档

上节介绍了网关层面聚合API文档,通过网关的路由信息找到了各个服务的请求地址,这节讲一下微服务如何集成Swagger。 网关的API文档默认调用的是微服务的**/v2/api-docs**这个接口获取API详细信息,比如文章服务的URL:http://localhost:9000/blog-article/v2/api-docs,返回信…

【DeepLearning.AI】吴恩达系列课程——使用Gradio构建AI应用

目录 前言一、Gradio介绍1-1、Gradio介绍1-2、安装1-3、小栗子 二、使用Gradio构建AI应用2-1、NLP任务2-1-1、文本摘要2-1-2、命名实体识别 2-2、聊天任务&#xff08;ChatYuan&#xff09;2-2-1、模型介绍2-2-2、模型下载、参数设置2-2-3、模型测试2-2-4、嵌入到Gradio里2-2-5…

leetcode:2864. 最大二进制奇数(python3解法)

难度&#xff1a;简单 给你一个 二进制 字符串 s &#xff0c;其中至少包含一个 1 。 你必须按某种方式 重新排列 字符串中的位&#xff0c;使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。 以字符串形式&#xff0c;表示并返回可以由给定组合生成的最大二进制奇数。…

SVN代码回滚之Update item to thisversion和Revert to this version 区别

背景 在使用SVN管理代码时免不了进行代码的合并或者回退&#xff0c;本篇主要讲回退至某个版本的SVN操作。 内容 对目标代码右键查看log&#xff0c;选中某个你想回滚的版本&#xff0c;然后右键会看到如下图 假设log中已经有5个版本&#xff0c;分别为1&#xff0c;2&…

Phpstudy v8.0/8.1小皮升级Apache至最新,同时升级openssl版本httpd-2.4.58 apache 2.4.58

1.apache官网下载最新版本的apache 2.4.58 2.phpstudy下apache停止运行&#xff0c;把原来的Apache文件夹备份一份 复制图中的文件替换apache目录下文件 3.phpstudy中开启apache

用按层次顺序遍历二叉树的方法,设计算法统计树中度为1的结点数目

用按层次顺序遍历二叉树的方法&#xff0c;设计算法统计树中度为1的结点数目 代码思路&#xff1a; 层序遍历的实现需要借助一个辅助队列 首先将根结点入队&#xff0c;然后根出队&#xff0c;把根的两个子树入队 然后下面循环执行&#xff1a;队头元素出队&#xff0c;队头元…

手机文件怎么传到电脑?简单方法分享!

将手机文件传输到电脑可以将其备份&#xff0c;以防数据丢失或意外情况发生。并且电脑具有更强大的处理能力&#xff0c;可以将文件进行编辑、修改、转换等操作&#xff0c;大大提高了工作效率。那么&#xff0c;手机文件怎么传到电脑&#xff1f;本文将为大家提供简单易懂的解…

[SpringCloud] SpringCloud配置中心的核心原理

SpringCloud是什么时候去拉取配置中心的配置中心客户端的配置信息为什么要写在bootstrap文件中对象中注入的属性是如何动态刷新的一些开源的配置中心是如何整合SpringCloud的 文章目录 1.从SpringBoot的启动过程说起1.1 大致过程 2.准备Environment的核心操作2.1 前置操作 3.pr…

Redis 两种持久化方式 AOF 和 RDB

目录 一、Redis 的持久化 二、Redis 的持久化方式 RDB RDB 介绍 RDB 的触发方式&#xff1a;. 三、RDB的文件生成策略 四、Save 和 Bgsave 命令的区别 六、RDB 最佳配置 七、触发机制-不容忽略方式 AOF 一、AOF介绍 二、RDB所存在的问题 三、AOF 三种策略 四、AOF…

6.15合并二叉树(LC617-E)

算法&#xff1a; 前序、中序、后序都可以&#xff0c;这道题正常逻辑一般都是用前序 正确代码&#xff1a; 这里就是在root1这颗树上改的&#xff0c;也可以新建一个树。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode …

Long-Context下LLM模型架构全面介绍

深度学习自然语言处理 原创作者&#xff1a;cola 随着ChatGPT的快速发展&#xff0c;基于Transformer的大型语言模型(LLM)为人工通用智能(AGI)铺平了一条革命性的道路&#xff0c;并已应用于知识库、人机界面和动态代理等不同领域。然而&#xff0c;存在一个普遍的限制:当前许多…

「Verilog学习笔记」非整数倍数据位宽转换8to12

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 要实现8bit数据至12bit数据的位宽转换&#xff0c;必须要用寄存器将先到达的数据进行缓存。8bit数据至12bit数据&#xff0c;相当于1.5个输入数据拼接成一个输出数据&#…

【1】AR Tag 在ros中的使用

1.定义 AR Tag 是一种用于增强现实&#xff08;AR&#xff09;应用中的视觉标记&#xff0c;用于跟踪和定位虚拟物体在现实世界中的位置。 AR Tag由黑白正方形图像表示&#xff0c;图像内部有黑色边框中的某些图案。它与我们经常用到的二维码长得类似&#xff0c;原理其实也一…

动态规划专项---状态机模型

文章目录 大盗阿福股票买卖IV股票买卖V设计密码修复DNA 一、大盗阿福OJ链接 本题思路:状态表示当前第i家店铺选择偷或者不偷的最大利益。状态计算:f[i][0]std::max(f[i-1][0],f[i-1][1]);//如果第i家店铺被偷,则第i-1家店铺不能被偷&#xff0c;f[i][1]f[i-1][0]w[i]…