Zookeeper
【黑马程序员Zookeeper视频教程,快速入门zookeeper技术】
文章目录
- Zookeeper
- 4 Zookeeper JavaAPI 操作
- 4.1 Curator 介绍
- 4.1.1 Curator 介绍
- 4.2 Curator API 常用操作
- 4.2.1 Curator API 常用操作
- 4.2.2 建立连接
4 Zookeeper JavaAPI 操作
4.1 Curator 介绍
4.1.1 Curator 介绍
-
Curator 是 Apache ZooKeeper 的Java客户端库。
-
常见的ZooKeeper Java API :
- 原生Java API
- ZkClient
- Curator
-
Curator 项目的目标是简化 ZooKeeper 客户端的使用。
-
Curator 最初是 Netfix 研发的,后来捐献了 Apache 基金会,目前是 Apache 的顶级项目。
官网:http://curator.apache.org/
注意版本,要与我们服务器中的一致
其实老师这儿 已经给了安装包
4.2 Curator API 常用操作
4.2.1 Curator API 常用操作
- 建立连接
- 添加节点
- 删除节点
- 修改节点
- 查询节点
- Watch事件监听
- 分布式锁实现
4.2.2 建立连接
直接开干
先来一个 全新的 模块
直接创建
OK,一个全新的Maven 模块工程【新版IDEA 会自动创建成 模块】
【导入坐标】
<?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"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dingjiaxiong</groupId>
<artifactId>curator-zk</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!--curator-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
<!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
OK
【复制配置文件】
放到 工程的resources 目录下
log4j.rootLogger=off,stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%d{yyyy-MM-dd HH/:mm/:ss}]%-5p %c(line/:%L) %x-%m%n
这个就没啥多说 的了,日志关掉了
创建新的测试类
newClient() 方法源码
/** * Create a new client * * @param connectString list of servers to connect to * @param sessionTimeoutMs session timeout * @param connectionTimeoutMs connection timeout * @param retryPolicy retry policy to use * @return client */ public static CuratorFramework newClient(String connectString, int sessionTimeoutMs, int connectionTimeoutMs, RetryPolicy retryPolicy) { return builder(). connectString(connectString). sessionTimeoutMs(sessionTimeoutMs). connectionTimeoutMs(connectionTimeoutMs). retryPolicy(retryPolicy). build(); }
package com.dingjiaxiong.curator;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.junit.Test;
/**
* ClassName: CuratorTest
* date: 2022/11/14 19:37
*
* @author DingJiaxiong
*/
public class CuratorTest {
/**
* 建立连接
* */
@Test
public void testConnect(){
//1. 第一种方式
/*
* Create a new client
*
* @param connectString list of servers to connect to【连接字符串,zk server的 地址和端口】
* @param sessionTimeoutMs session timeout【会话超时时间,单位ms】
* @param connectionTimeoutMs connection timeout【连接超时时间,单位ms】
* @param retryPolicy retry policy to use【重试策略】
*/
RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000,10);
CuratorFramework client = CuratorFrameworkFactory
.newClient("服务器IP:2181", 60 * 1000, 15 * 1000, retryPolicy);
//开启连接
client.start();
//2. 第二种方式
// CuratorFrameworkFactory.builder();
}
}
直接运行
OK,绿了,说明连接成功 【这是第一种方式】
看看第二种
//2. 第二种方式
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString("43.138.50.253:2181")
.sessionTimeoutMs(60 * 1000)
.connectionTimeoutMs(15 * 1000)
.retryPolicy(retryPolicy)
.build();
//第二种方式开启连接
client.start();
运行测试
OK,又绿了,这种方式也行
而且这种方式 可以加上一个名称空间
这样加上,
之后我们 进行操作的时候,就会默认 加上 /dingjiaxiong 这个路径在前面