当前位置: 首页 > news >正文

CentOS 7 基于C 连接ZooKeeper 客户端

前提条件:CentOS 7 编译ZooKeeper 客户端,请参考:CentOS 7 编译ZooKeeper 客户端

1、Docker 安装ZooKeeper

# docker 获取zookeeper 最新版本
docker pull zookeeper# docker 容器包含镜像查看
docker iamges# 准备zookeeper 镜像文件挂载对应文件目录
将它部署在 /usr/local/zookeeper 目录下:
cd /usr/local && mkdir zookeeper && cd zookeeper创建data目录,用于挂载容器中的数据目录:
mkdir data# docker 运行zookeeper
docker run -d -e TZ="Asia/Shanghai" -p 2181:2181 -v $PWD/data:/data --name zookeeper --restart always zookeeper# 运行参数说明
-e TZ="Asia/Shanghai" # 指定上海时区 
-d # 表示在一直在后台运行容器
-p 2181:2181 # 对端口进行映射,将本地2181端口映射到容器内部的2181端口
--name # 设置创建的容器名称
-v # 将本地目录(文件)挂载到容器指定目录;
--restart always #始终重新启动zookeeper# docker 查看zookeeper 运行状态
docker ps

2、CentOS 7 基于C 连接ZooKeeper Demo

在 /usr/local/source_code/zookeeper_demo/ 目录下,新增zookeeper_demo.c 文件,内容如下:

[root@localhost source_code]# cd zookeeper_demo/
[root@localhost zookeeper_demo]# ll
总用量 0
[root@localhost zookeeper_demo]# vi zookeeper_demo.c
[root@localhost zookeeper_demo]# ll
总用量 4
-rw-r--r--. 1 root root 575 10月 10 12:46 zookeeper_demo.c
#include <zookeeper/zookeeper.h>int main() {zhandle_t *zh;char buffer[512];int bufferlen=sizeof(buffer);// 初始化zookeeper客户端zh = zookeeper_init("localhost:2181", NULL, 30000, 0, 0, 0);if (zh == NULL) {printf("zookeeper 连接失败! \n");}else {printf("zookeeper 连接成功! \n");}// 获取节点数据int ret = zoo_get(zh, "/test", 0, buffer, &bufferlen, NULL);if (ret != ZOK) {// 处理错误printf("zookeeper 获取/test 节点数据异常! \n");}// do something with the node data// 关闭zookeeper客户端zookeeper_close(zh);return 0;}
  • 编译代码的时候需要加链接的库及库的路径,那么编译命令如下
gcc zookeeper_demo.c -o zookeeper_demo -L/usr/local/lib/ -lzookeeper_st

在执行的时候如果出现动态库无法加载,请进行如下配置。

在 /etc/ld.so.conf.d/ 目录下新建文件 usr-libs.conf ,内容是: /usr/local/lib
vim /etc/ld.so.conf.d/usr-libs.conf
  • 然后使用命令 /sbin/ldconfig 更新一下配置即可。
sbin/ldconfig

知识拓展:Linux 编译zookeeper 默认填充库文件地址和头文件地址

zookeeper 库文件地址:在/usr/local/lib目录下的libzookeeper_mt(集群模式)/libzookeeper_st(单列模式)

[root@localhost zookeeper_demo]# cd /usr/local/lib
[root@localhost lib]# ll
总用量 6820
-rw-r--r--. 1 root root  532172 10月 10 09:44 libhiredis.a
lrwxrwxrwx. 1 root root      19 10月 10 09:44 libhiredis.so -> libhiredis.so.1.1.0
lrwxrwxrwx. 1 root root      19 10月 10 09:44 libhiredis.so.1 -> libhiredis.so.1.1.0
-rwxr-xr-x. 1 root root  318840 10月 10 09:44 libhiredis.so.1.1.0
-rw-r--r--. 1 root root 2262492 9月   4 15:28 libjpeg.a
-rwxr-xr-x. 1 root root     918 9月   4 15:28 libjpeg.la
lrwxrwxrwx. 1 root root      16 9月   4 15:28 libjpeg.so -> libjpeg.so.9.5.0
lrwxrwxrwx. 1 root root      16 9月   4 15:28 libjpeg.so.9 -> libjpeg.so.9.5.0
-rwxr-xr-x. 1 root root 1237096 9月   4 15:28 libjpeg.so.9.5.0
-rw-r--r--. 1 root root  883484 8月  31 16:56 libzookeeper_mt.a
-rwxr-xr-x. 1 root root     987 8月  31 16:56 libzookeeper_mt.la
lrwxrwxrwx. 1 root root      24 8月  31 16:56 libzookeeper_mt.so -> libzookeeper_mt.so.2.0.0
lrwxrwxrwx. 1 root root      24 8月  31 16:56 libzookeeper_mt.so.2 -> libzookeeper_mt.so.2.0.0
-rwxr-xr-x. 1 root root  453944 8月  31 16:56 libzookeeper_mt.so.2.0.0
-rw-r--r--. 1 root root  835950 8月  31 16:56 libzookeeper_st.a
-rwxr-xr-x. 1 root root     977 8月  31 16:56 libzookeeper_st.la
lrwxrwxrwx. 1 root root      24 8月  31 16:56 libzookeeper_st.so -> libzookeeper_st.so.2.0.0
lrwxrwxrwx. 1 root root      24 8月  31 16:56 libzookeeper_st.so.2 -> libzookeeper_st.so.2.0.0
-rwxr-xr-x. 1 root root  433840 8月  31 16:56 libzookeeper_st.so.2.0.0
drwxr-xr-x. 2 root root      42 10月 10 09:44 pkgconfig

 zookeeper 头文件地址:在/usr/local/include目录下的zookeeper目录中。

[root@localhost zookeeper_demo]# cd /usr/local/include/
[root@localhost include]# ll
总用量 88
drwxr-xr-x. 3 root root   116 10月 10 09:44 hiredis
-rw-r--r--. 1 root root  3301 9月   4 15:28 jconfig.h
-rw-r--r--. 1 root root 14588 9月   4 15:28 jerror.h
-rw-r--r--. 1 root root 14925 9月   4 15:28 jmorecfg.h
-rw-r--r--. 1 root root 49408 9月   4 15:28 jpeglib.h
drwxr-xr-x. 2 root root   132 8月  31 16:56 zookeeper
[root@localhost include]# cd zookeeper/
[root@localhost zookeeper]# ll
总用量 108
-rw-r--r--. 1 root root  1361 8月  31 16:56 proto.h
-rw-r--r--. 1 root root  3077 8月  31 16:56 recordio.h
-rw-r--r--. 1 root root 72869 8月  31 16:56 zookeeper.h
-rw-r--r--. 1 root root 20328 8月  31 16:56 zookeeper.jute.h
-rw-r--r--. 1 root root  1747 8月  31 16:56 zookeeper_log.h
-rw-r--r--. 1 root root  1055 8月  31 16:56 zookeeper_version.h

3、ZooKeeper 核心方法

  • 查看ZooKeeper.h 头文件涉及核心方法
[root@localhost zookeeper]# pwd
/usr/local/include/zookeeper
[root@localhost zookeeper]# cat zookeeper.h
********************

 

个人认为的核心方法如下:

1. create():此方法由客户端使用来创建新的znode。它需要znode的路径和数据作为参数。
 
2. exists():这个方法由客户端用来检查特定的znode是否存在。它需要znode的路径作为参数。

3. getData():此方法用于从特定的znode获取数据。它需要znode路径作为参数。

4. setData():这个方法用于设置特定znode的数据。它需要znode路径作为参数。

5. getChildren():此方法用于得到特定znode的所有子节点。它需要znode路径作为参数。

6. delete():这个方法允许客户端删除一个特定的znode。它需要znode的路径作为参数。

7. sync():此方法用于同步znode的状态到当前客户端。

8. close():此方法用于关闭客户端与ZooKeeper服务的连接。

9. addAuthInfo():在此ZooKeeper会话上添加授权信息。

10. getState():返回ZooKeeper客户端的状态。

以上这些方法的目的是让客户端能够在ZooKeeper的znode树中浏览、读写数据,监控znode状态的改变等等。

备注:ZooKeeper API中的所有读方法get*在成功返回时都会提供一个Stat对象。Stat对象包含了关于znode的元数据,比如它的czxid、mzxid、pzxid、version等。

相关文章:

CentOS 7 基于C 连接ZooKeeper 客户端

前提条件&#xff1a;CentOS 7 编译ZooKeeper 客户端&#xff0c;请参考&#xff1a;CentOS 7 编译ZooKeeper 客户端 1、Docker 安装ZooKeeper # docker 获取zookeeper 最新版本 docker pull zookeeper# docker 容器包含镜像查看 docker iamges# 准备zookeeper 镜像文件挂载对…...

2023-2024-1 for循环-1(15-38)

7-15 输出闰年 输出21世纪中截止某个年份以来的所有闰年年份。注意&#xff1a;闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。 输入格式: 输入在一行中给出21世纪的某个截止年份。 输出格式: 逐行输出满足条件的所有闰年年份&#xff0c;即每个年…...

初级问题 程序中的变量是指什么?中级问题 把若干个数据沿直线排列起来的数据结构叫作什么?高级问题 栈和队列的区别是什么?

目录 1.深刻主题 2.描写复杂人物 初级问题 程序中的变量是指什么&#xff1f; 中级问题 把若干个数据沿直线排列起来的数据结构叫作什么&#xff1f; 高级问题 栈和队列的区别是什么&#xff1f; 计算机图形学&#xff08;有效边表算法&#xff09; 介绍一下计算机图形学…...

clickhouse数据库简介,列式存储

clickhouse数据库简介 1、关于列存储 所说的行式存储和列式存储&#xff0c;指的是底层的存储形式&#xff0c;数据在磁盘上的真实存储&#xff0c;至于暴漏在上层的用户的使用是没有区别的&#xff0c;看到的都是一行一行的表格。 idnameuser_id1闪光10266032轨道物流10265…...

flask 发送ajax

前端 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script src"https://cdn.lyshark.com/javascript/jquery/3.5.1/jquery.min.js"…...

Android Gradle 命令打包AAR

平台 Android Archive (AAR) 文件是一种特定于Android的存档文件格式&#xff0c;用于将Android库和资源打包成单个可重用的单元。AAR文件通常用于共享和分发Android库&#xff0c;以便其他Android应用项目可以轻松引用和使用这些库。 AAR文件是一种便捷的方式&#xff0c;用于…...

如何导出带有材质的GLB模型?

1、为什么要使用 GLB 模型? GLB格式&#xff08;GLTF Binary&#xff09;是一种用于存储和传输3D模型及相关数据的文件格式&#xff0c;具有以下优点和作用&#xff1a; 统一性&#xff1a;GLB是一种开放标准的3D文件格式&#xff0c;由Khronos Group制定和维护。它融合了GL…...

C/C++面试常见知识点

目录 C/C语言C内存分区malloc/free与new/delete的区别联合体联合体大小的计算 结构体对齐为什么需要结构体内存对齐 结构体与联合体的区别左值引用与右值引用指针和引用的区别迭代器失效static关键字在C语言的作用进程地址空间的分布内联函数 三大特性构造函数不能是虚函数析构…...

详细介绍数据结构-堆

计算机中的堆数据结构 什么是堆 在计算机科学中&#xff0c;堆&#xff08;Heap&#xff09;是一种重要的数据结构&#xff0c;它用于在动态分配时存储和组织数据。堆是一块连续的内存区域&#xff0c;其中每个存储单元&#xff08;通常是字节&#xff09;都与另一个存储单元…...

001flutter基础学习

flutter基础学习 参考:https://book.flutterchina.club/chapter1/flutter_intro.html Flutter是谷歌的移动UI框架跨平台: Linux,Android, IOS,Fuchsia原生用户界面:它是原生的,让我们体验更好,性能更好开源免费&#xff1a;完全开源,可以进行商用Flutter与主流框架的对比 Cor…...

leetCode 1143.最长公共子序列 动态规划 + 图解

此题我的往期文章推荐&#xff1a; leetCode 1143.最长公共子序列 动态规划 滚动数组-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/133689692?spm1001.2014.3001.5501leetCode 1143.最长公共子序列 一步步思考动态规划 优化空间复杂度_呵呵哒(&#xf…...

解密人工智能:KNN | K-均值 | 降维算法 | 梯度Boosting算法 | AdaBoosting算法

文章目录 一、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 二、KNN三、K-均值四、降维算法五、梯度Boosting算法和AdaBoosting算法六、结语 一、机器学习算法简介 机器学习算法是一种基于数据和经验的算法&#xff0c;通过对大量数据的学习和分析&…...

Python深度学习实践

线性模型 课程 import numpy as np import matplotlib.pyplot as plt x_data[1.0,2.0,3.0] y_data[2.0,4.0,6.0] #前馈函数 def forward(x):return x*w #损失函数 def loss(x,y):y_predforward(x)return (y_pred-y)*(y_pred-y) w_list[] mse_list[] for w in np.arange(0.0,4…...

VS2017+QT+PCL环境配置

前言: 最近自己再弄一下小项目中需要用到pcl来开发点云的显示,但是却遇到很多坑,所以记录下来分析给知音人。 避雷:由于vtk和pcl之间有版本以来关系,但是安装过程是不变的。 选择对应的版本参考如下安装: pcl1.8.1依赖vtk版本7.1.1;pcl1.9.1至pcl1.12.0依赖vtk最低版本为…...

207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

目录 ★ 发送消息★ 创建队列的两种方式代码演示需求1&#xff1a;发送消息1、ContentUtil 先定义常量2、RabbitMQConfig 创建队列的两种方式之一&#xff1a;配置式&#xff1a;问题&#xff1a; 3、MessageService 编写逻辑PublishController 控制器application.properties 配…...

想要精通算法和SQL的成长之路 - 滑动窗口和大小根堆

想要精通算法和SQL的成长之路 - 滑动窗口和大小根堆 前言一. 大小根堆二. 数据流的中位数1.1 初始化1.2 插入操作1.3 完整代码 三. 滑动窗口中位数3.1 在第一题的基础上改造3.2 栈的remove操作 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 大小根堆 先来说下大小根堆是什…...

Python算法练习 10.15

leetcode 2130 链表的最大孪生和 在一个大小为 n 且 n 为 偶数 的链表中&#xff0c;对于 0 < i < (n / 2) - 1 的 i &#xff0c;第 i 个节点&#xff08;下标从 0 开始&#xff09;的孪生节点为第 (n-1-i) 个节点 。 比方说&#xff0c;n 4 那么节点 0 是节点 3 的孪…...

智能防眩目前照灯系统控制器ADB

经纬恒润的自适应远光系统—— ADB&#xff08;Adaptive Driving Beam&#xff09; 是一种能够根据路况自适应变换远光光型的智能远光控制系统。根据本车行驶状态、环境状态以及道路车辆状态&#xff0c;ADB 系统自动为驾驶员开启或退出远光。同时&#xff0c;根据车辆前方视野…...

若依 ruoyi 路径 地址 # 井号去除

export default new Router({mode: history, // history 去掉url中的# 、hash 包含#号scrollBehavior: () > ({ y: 0 }),routes: constantRoutes })...

Elasticsearch 和 Arduino:一起变得更好!

作者&#xff1a;Enrico Zimuel 使用 Arduino IoT 设备与 Elasticsearch 和 Elastic Cloud 进行通信的简单方法 在 Elastic&#xff0c;我们不断寻找简化搜索体验的新方法&#xff0c;并开始关注物联网世界。 来自物联网的数据收集可能非常具有挑战性&#xff0c;尤其是当我们…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

前端调试HTTP状态码

1xx&#xff08;信息类状态码&#xff09; 这类状态码表示临时响应&#xff0c;需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分&#xff0c;客户端应继续发送剩余部分。 2xx&#xff08;成功类状态码&#xff09; 表示请求已成功被服务器接收、理解并处…...