分布式项目中 如何保证线程安全问题?-------ZooKeeper

article/2025/9/14 8:15:48

 

前沿:

  上篇文章我们聊到了在解决分布式项目中线程安全问题,提到解决方案还有其他的,那么在此提出 基于 zookeeper  解决分布式项目中的线程安全问题 也是目前市面上比较流行的。做为一个高级开发工程师也是必须要学习的。

ZooKeeper是什么东西?

 是协调多个分布式进程之间活动的。 主要应用在分布式系统中 保证跨jvm虚拟机之间的线程安全。

ZooKeeper特征的初步了解?

   在使用的时候,我们应该了解一下它。其实ZooKeeper的原始功能很简单,基纡它的层次型的目录树的数据结构,并通过对树上的节点进行有效管理,可以设计出各种各样的分布式集群管理功能。此外, ZooKeeper本身 也是分布式集群的。

 下图所示,给出了一个典型的Zookeeper层级命名空间,整个命名方式类似于文件系统,同一个目录下不能有相同名称的目录节点---特点:有层次结构构,类似于包,同一目录里面不能出现两个相同的包

分析其特征:

   基于上面的图片,每一个节点是不能够重复的,如果谁创建了节点,那么谁就获取到了锁

关于节点的分类及生命周期:

临时节点 :

       创建了节点对象后,用完了,就会自动删除,临时节点下不能创建子节点

持久节点:

     节点创建,就一直在。除非有操作主动删除

临时有序节点:

      在临时几点的基础上增加了顺序,可以用来实现分布式锁

持久有序节点:

        就是在创建持久节点的时候,会自动的在持久节点名字后加数字后缀

那么现在我们怎么来 使用ZooKeeper 呢?

  安装:

  1. 官方下载地址:Index of /apache/zookeeper , 下载后获得,解压即可安装。
  2. 安装配置: 把conf目录下的zoo_sample.cfg改名成zoo.cfg,这里我是先备份了zoo_sample.cfg再改的名。修改zoo.cfg的值如下:

    dataDir=D:/zookeeper-3.4.9/data/data

    dataLogDir=D:/zookeeper-3.4.9/data/log

启动:

         点击bin目录下的zkServer.cmd 这时候出现下面的提示就说明配置成功了。

可视化界面安装:

        图形界面-ZooViewer:https://blog.csdn.net/u010889616/article/details/80792912

 代码操作zkclient:

<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

API总结:

  1. new ZkClient("127.0.0.1:2181",5000); 创建zookeeper客户端
  2. client.getChildren("/")获取子节点 “/”代表根节点
  3. client.createPersistent创建持久节点
  4. client.createPersistentSequential创建持久有顺节点,会在path后面增加序号
  5. client.createEphemeral创建临时节点
  6. client.createEphemeralSequential创建临时有序节点
  7. client.subscribeChildChanges订阅子节点的改变
  8. client.subscribeDataChanges订阅某个节点的数据改变

结尾:

            使用的话,就按照api来,这里我就不做过多说明,很简单的。


http://chatgpt.dhexx.cn/article/1FCIcFci.shtml

相关文章

分布式线程安全(redis、zookeeper、数据库)

https://blog.csdn.net/u010963948/article/details/79006572 Q:一个业务服务器&#xff0c;一个数据库&#xff0c;操作&#xff1a;查询用户当前余额&#xff0c;扣除当前余额的3%作为手续费 synchronized lock db lock Q&#xff1a;两个业务服务器&#xff0c;一个数据库&…

分布式集群中如何保证线程安全?

目录 分布式集群中的线程安全问题 解决方法 串行化 分布式锁 Redis如何实现呢&#xff1f; 问题&#xff1a;setnx刚好获取到锁&#xff0c;业务逻辑出现异常&#xff0c;导致锁无法释放 问题&#xff1a;可能会释放其他服务器的锁。 问题&#xff1a;删除操作缺乏原子…

java outlook 发送邮件_基于java使用JavaMail发送邮件

一、邮件的相关概念 邮件协议。主要包括&#xff1a; SMTP协议&#xff1a;Simple Mail Transfer Protocol&#xff0c;即简单邮件传输协议&#xff0c;用于发送电子邮件 POP3协议&#xff1a;Post Office Protocol 3&#xff0c;即邮局协议的第三个版本&#xff0c;用于接收邮…

java 发邮件(有正文,有图片,有附件)

一 需求: 1 java实现邮件发送 2 发送内容: ① 正文: 图片说明和图片 ② 附件一: 图片作为附件发送 ③ 附件二: Excel表格 二 思路: 1首先创建一个 Java 工程&#xff0c;把下载好的 javax.mail.jar 作为类库加入工程 2邮件创建步骤: 配置连接邮件服务器的参数( 邮件服务器SM…

java接收邮件_Java实现邮件收发

一. 准备工作 1. 传输协议 SMTP协议-->发送邮件: 我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器) POP3协议-->接收邮件: 我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器) 2. 邮件收发原理 闪电…

java发送邮件工具类

1. 普通java实现邮件发送 1.1 创建maven项目&#xff0c;配置pom.xml文件 <?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&qu…

java发送邮件带附件

一、 开启SMTP服务 1.基本都在邮箱设置里&#xff0c;开启后会获得神秘代码&#xff0c;后面有用。 2.记得添加依赖&#xff0c;或者自己添加jar包。 <dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>…

java 邮件模板

邮件发送代码可参照 java 发送邮件 1.情形 邮件发送代码可参照上述&#xff0c;本例只说明如果读取模板文件。公司定义模板较为复杂的情况&#xff0c;可采用此类发送方式 2. 模板 2.1 resource 建立模板 2.2 ftl 模板如下 <p>您好&#xff0c;${name}&#xff0c;您…

使用JAVA实现邮件发送功能

一、准备工作 小编今天以 QQ邮箱 进行演示操作。 想要使用代码操作邮箱发送邮件&#xff0c;需要在邮箱设置中申请开通 POP3/SMTP 服务。 接下来跟着小编的图文一步一步的操作开通吧&#xff01; 1.1 登录网页QQ邮箱&#xff0c;点击页面顶部设置按钮。 1.2 点击后会打开邮箱…

java发送qq邮件

1.登录qq邮箱 1&#xff09;点击设置 2&#xff09;点击账户 3&#xff09;开启第一个服务&#xff0c;我已经开过了 4&#xff09;开启验证&#xff08;让你发送指定内容到某个号码&#xff09;&#xff0c;完成后点击我已发送&#xff0c;就会出现授权码&#xff0c;授权码很…

java实现邮件发送

一.第一步:导入两个jar包。 activation.jar 和 mail.jar, 一定要添加到构建路径(不然找不到包) 两个用于Java发送邮件的jar包-Java文档类资源-CSDN下载 二、创建邮箱工具类:Mail.java import java.util.*; import java.io.*; import javax.mail.*; import javax.m…

Java(81):Java发邮件简单示例

Java Email jar包下载地址&#xff1a;JavaMail API https://www.oracle.com/java/technologies/javamail.html JavaMail 右侧下载&#xff0c;选择jar包下载 API文档参考&#xff1a;JavaMail API documentation https://javaee.github.io/javamail/docs/api/ 或直接引用…

java发送qq邮件_「java发邮件」Java 通过SMTP实现发送QQ邮件 - seo实验室

java发邮件 在Eclipse中创建项目&#xff0c;并把javax.amil.jar和commons-email-1.5,jar复制到项目中 链接&#xff1a;https://pan.baidu.com/s/1sQjA1GEpKi6IJJRGHKxjeA 密码&#xff1a;4ene 添加步骤&#xff1a; 1.首先在项目下创建一个文件夹&#xff0c;保存我们的jar包…

Java发邮件配置-hutool+腾讯企业邮箱

1、技术选型 1.1、hutool工具 1.2、javax.mail 1.3、腾讯企业邮箱2、环境准备 2.1、pom <!--javax.mail--><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependen…

Java(83)Java发邮件简单工具类

1、Maven引用 <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api --><dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.6.2</version></dependency><…

java发邮件 动态切换当前发送人

最近项目需要实现一个发送邮件功能&#xff0c;踩了一些坑&#xff0c;最终实现了。 在此写一下心得 开始做的时候一塌糊涂&#xff0c;觉得挺难的&#xff0c;但是做完之后发现其实简单的一批&#xff0c;接下来我就来写一下实现流程。 1、准备好拿来发送邮件的账号&#xf…

Java 发邮件-带附件且正文html格式

入职新公司不久&#xff0c;接到一个给用户发邮件的需求&#xff0c;有两点需要说明的&#xff1a;1&#xff09;正文需要格式化&#xff1b;2&#xff09;需要带附件。 大概了解了一下需求&#xff0c;我马上开始思考&#xff0c;现有项目中是否有类似的接口可以支持&#xf…

java实现发送邮件

本文介绍下java实现邮件的发送&#xff0c;意在网站用户评论时能够及时通知站长和用户评论被回复后能够及时通知用户。 下文介绍下具体实现。 java实现 首先引入springboot的邮箱依赖 <dependency><groupId>org.springframework.boot</groupId><artif…

java邮件发送

一、JavaMail介绍 1、概述 JavaMail是利用现有的邮件账户发送邮件的工具&#xff0c;比如我在网易注册一个邮箱账户&#xff0c;通过JavaMail的操控&#xff0c;我可以不亲自登录网易邮箱&#xff0c;让程序自动的使用网易邮箱发送邮件。这一机制被广泛的用在注册激活和垃圾邮…

使用Java实现邮件的发送

数年前&#xff0c;邮件的发送是经过人为的运输&#xff0c;从发件人---当地邮局---收件地邮局---收件人&#xff0c;付出的人力物力是非常大的。随着时代的进步&#xff0c;科技的发展&#xff0c;如今我们的生活中出现更高级发送邮件的方式&#xff0c;最常用的就是从&#x…