小工具      在线工具  汉语词典  css  js  c++  java

Curator与zookeeper版本问题,分布式锁

Java 额外说明

收录于:42天前

1、curator和zookeeper版本如下pom.xml

        <!-- zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
            <type>pom</type>
            <!--排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.7</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>zookeeper</artifactId>
                    <groupId>org.apache.zookeeper</groupId>
                </exclusion>
            </exclusions>
        </dependency>

2.分布式锁

例如,在分布式编程中,最常见的情况是应用程序在线部署在多台机器上。因此,当多个应用程序同时访问某个资源时,需要某种机制来协调它们。例如,应用程序当前正在重建缓存内容,需要暂时锁定某个区域以阻止访问;另一个例子是调度程序只希望一次由一个应用程序执行一个任务,等等。

下面的程序将启动两个线程t1和t2来竞争锁。线程获得锁需要5秒的时间。运行多次后可以观察到,有时t1先获得锁,而t2则等待,有时则相反。 Curator将使用我们提供的锁路径的节点作为全局锁。该节点的数据类似于这样的格式:[_c_64e0811f-9475-44ca-aa36-c1db65ae5350-lock-0000000005]。每次获得锁时都会生成此信息。 String,释放锁时数据被清除。

分布式锁测试代码:

package com.robinboot.facade.test;

import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.RetryNTimes;

import java.util.concurrent.TimeUnit;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;

/**
 * @auther: TF12778
 * @date: 2020/7/15 10:37
 * @description: Curator framework's distributed lock test.
 *
 * https://blog.csdn.net/robinson_911/article/details/107357978
 */
public class CuratorDistrLockTest {

    /** Zookeeper info */
    private static final String ZK_ADDRESS = "localhost:2181";
    private static final String ZK_LOCK_PATH = "/zktest";

    public static void main(String[] args) throws InterruptedException {
        // 1.Connect to zk
        CuratorFramework client = CuratorFrameworkFactory.newClient(
                ZK_ADDRESS,
                new RetryNTimes(10, 5000)
        );
        client.start();
        System.out.println("zk client start successfully!");

        Thread t1 = new Thread(() -> {
            doWithLock(client);
        }, "t1");
        Thread t2 = new Thread(() -> {
            doWithLock(client);
        }, "t2");

        t1.start();
        t2.start();
    }

    private static void doWithLock(CuratorFramework client) {
        InterProcessMutex lock = new InterProcessMutex(client, ZK_LOCK_PATH);
        try {
            if (lock.acquire(10 * 1000, TimeUnit.SECONDS)) {
                System.out.println(Thread.currentThread().getName() + " hold lock");
                Thread.sleep(5000L);
                System.out.println(Thread.currentThread().getName() + " release lock");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                lock.release();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

输出日志:

参考:https://www.cnblogs.com/erbing/p/9799098.html

https://blog.csdn.net/weixin_44565095/article/details/100619725

. . .

相关推荐

额外说明

MySql - 索引底层数据结构和算法

文章目录 简介 各类树的定义 索引 什么是索引 MySql未使用二叉树 MySql未使用红黑二叉树 B-Tree B树 B+Tree B+树(B-Tree的优化) 简介 Mysql是常用的数据库,本篇博客重点介绍索引和其相关的数据结构。 各类树的定义 参

额外说明

进军人工智能|机器人,人机协作新时代

前言: 机器人技术为人类提供协助、增强生产力,改善生活质量,并推动科技进步和社会发展。 文章目录 序言 背景 核心技术支持 人机协作新纪元 目前形式 领跑人 困难和挑战 总结 机器人技术作为现代科技领域的重要研究方向,已经在各个领域展现出巨大的潜力和影响

额外说明

JSP练习题九九乘法口诀表与学生信息

练习一:在jsp页面中输出九九乘法口诀表 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title>

额外说明

设计模式(四):建造者模式的详细解析

如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想! 概述 建造者模式属于创建型设计

额外说明

LMDB报错:lmdb.Error: Attempt to operate on closed/deleted/dropped object.

问题描述: 对LMDB数据库进行写入时,报错:lmdb.Error: Attempt to operate on closed/deleted/dropped object. 原代码: env = lmdb.open(path, map_size

额外说明

mongoshake实现mongodb数据同步

前言 MongoShake是阿里云以Golang语言编写的通用平台型服务工具,它通过读取MongoDB的Oplog操作日志来复制MongoDB的数据以实现特定需求。 MongoShake还提供了日志数据的订阅和消费功能,可通过SDK、Kafka、Meta

额外说明

计算机组成原理--基于Logisim的初步认识(超详细/设计/实验/作业/练习)

目录 课程名:计算机组成原理 内容/作用:设计/实验/作业/练习 学习:基于Logisim的初步认识 一、前言 二、环境与设备 三、内容 四、结果与分析 课程名:计算机组成原理 内容/作用:设计/实验/作业/练习 学习:基于Logisim的初步认识 一、

额外说明

Java学习笔记3.10.5 异常处理 - 自定义异常

文章目录 零、本讲学习目标 一、为何要自定义异常 (一)存在问题 (二)解决方法 二、使用自定义异常 (一)语法格式 (二)案例演示 1、创建三角形类 2、创建计算三角形面积类 3、创建三角形异常类 4、方法抛出自定义异常 5、进行异常处理 (三)自定义

额外说明

蓝桥杯第九届真题 等腰三角形【省赛】【C组】

本题目要求你在控制台输出一个由数字组成的等腰三角形。 具体的步骤是: 先用1,2,3,…的自然数拼一个足够长的串 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。 比如,当三角形高度是8时: 输入,一个正整数n(3<n<300),表示三角形的高度

额外说明

【软考 系统架构设计师】软件工程⑤ 需求工程

>>回到总目录<< 为了不辜负已经订阅了专栏的同学们的信任,所以本专栏不会有任何的优惠活动。 另外,当订阅人数每次达到 2 n ( n > 2 ) 2^n(n>2) 2

ads via 小工具