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等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C#】什么是并发,C#常规解决高并发的基本方法

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 在实际项目开发中&#xff0c;多少都会遇到高并发的情况&#xff0c;有可能是网络问题&#xff0c;连续点击鼠标无反应快速发起了N多次调用接口&#xff0c; 导致极短时间内重复调用了多次…

Tomcat 线程模型性能调优

Linux I/O模型详解 I/O要解决什么问题 I/O&#xff1a;在计算机内存与外部设备之间拷贝数据的过程。 程序通过CPU向外部设备发出读指令&#xff0c;数据从外部设备拷贝至内存需要一段时间&#xff0c;这段时间CPU就没事情做了&#xff0c;程序就会两种选择&#xff1a; 让出…

四款数字办公工具大比拼,在线办公无压力

在线办公软件使企业、员工实现办公场所、距离的自由&#xff0c;尤其是近几年&#xff0c;受“口罩”的影响&#xff0c;远程办公软件的使用者也越来越多&#xff0c;无论是财务、行政、还是设计师&#xff0c;都开始追求好用的在线办公软件&#xff0c;作为办公软件发烧友&…

C++11新特性(右值引用,万能转发)

这篇文章是C的重中之重&#xff0c;通过这篇文章你能体会到C/C大佬们对性能的极致追求&#xff0c;你能感受到独属C/C人的浪漫&#xff0c;对高消耗的零容忍&#xff0c;对高性能的不倦探索。右值引用是由Scott Meyers在他的著名书籍《Effective C》中提出的&#xff0c;因为其…

webservice接口自动化测试

1&#xff0c;用soupui进行测试 2&#xff0c;安装soupUI 3&#xff0c;测试的时候是给了一个wdsl 操作步诹&#xff1a;new &#xff08;name , 填写地址&#xff09;---导入wsdl文件---看到所有的接口 发送请求的格式<xml> canshu</xml> 应用场景&#xff0c…

hutool实现文件上传与下载

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> 文件上传需要创建一个表 Autowiredprivate SysFileInfoMapper sysFileInfoMapper;Value("${ty.…

常用的语音芯片工作原理_分类为语音播报 语音识别 语音合成tts

1.0 语音芯片分类-语音播报-语音识别-语音合成 关于声音的需求&#xff0c;从始至终&#xff0c;都是很刚需的需求 。从语音芯片的演化就能看出很多的端倪&#xff0c;很多很多的产品他必须要有语音&#xff0c;才能实现更好的交互。而语音芯片的需求分类&#xff0c;其实也是很…

3D模型格式转换工具HOOPS Exchange:模型数据自由导入和导出

HOOPS Exchange是一套高性能软件库&#xff0c;可以为软件开发人员提供导入和导出3D文件格式的能力。HOOPS Exchange导入3D数据后&#xff0c;会将3D数据转换为PRC格式存放到内存中&#xff0c;最后导出成为其他3D格式。&#xff08;点击申请HOOPS Exchange免费试用&#xff09…

人大金仓数据库V8 windows下安装

此文为人大金仓数据库安装程序&#xff08;windows下kingbase开发及测试用&#xff09;。 1 人大金仓-成为世界卓越的数据库产品与服务提供商 官方下载安装包&#xff0c;同时需要下载授权文件&#xff0c;补丁文件可以不下。 2 点击安装 3 选择授权文件 4 默认安装即可&…

Docker 容器应急

容器网络简单理解 容器拥有n多张veth网卡与一张docker0网卡 docker 五种网络 bridge 默认网络&#xff0c;Docker启动后创建一个docker0网桥&#xff0c;默认创建的容器也是添加到这个网桥中。host 容器不会获得一个独立的network namespace&#xff0c;而是与宿主机共用一个…

统一机器人描述格式——URDF

URDF&#xff08;Unified Robot Description Format&#xff0c;统一机器人描述格式&#xff09;是ROS中一个非常重要的机器人模型描述格式&#xff0c;ROS同时也提供URDF文件的C解析器&#xff0c;可以解析URDF文件中使用XML格式描述的机器人模型。 在使用URDF文件构建机器人模…

【LeetCode力扣】75 快速排序的子过程partition(荷兰国旗问题)

目录 1、题目介绍 2、解题思路 2.1、冒泡排序暴力破解 2.2、快速排序的子过程partition 2.2.1、详细过程描述 2.2.2、代码描述 1、题目介绍 原题链接&#xff1a;75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 示例 1&#xff1a; 输入&#xff1a;nums [2,0,2…

【Python深度学习】目标检测和语义分割的区别

在计算机视觉领域&#xff0c;语义分割和目标检测是两个关键的任务&#xff0c;它们都是对图像和视频进行分析&#xff0c;但它们之间存在着明显的区别。本文将通过图像示例&#xff0c;详细阐述语义分割和目标检测之间的差异。 一、基本概念 1.1 语义分割&#xff08;Semantic…

升级MacOS后无法打开 Parallels Desktop,提示“要完成 Parallels Desktop 设置,请重新启动 Mac 。”

有用户升级macOS后&#xff0c;发现无法打开PD虚拟机了&#xff0c;提示“要完成 Parallels Desktop 设置&#xff0c;请重新启动 Mac 。”但是重启电脑之后&#xff0c;尝试了卸载重装&#xff0c;安装新版本&#xff0c;都无法解决问题&#xff0c;打开依旧如此提示&#xff…

C#关于接口的常见面试问题

1.1 关于C#接口的问题以及与抽象类的异同 什么是接口 继承有几种形式 为什么要使用接口&#xff1f; 接口类型可以用public关键字修饰吗&#xff1f; 接口能不能派生于抽象类&#xff1f; 接口能不能用Sealed修饰&#xff1f; 一个类可以继承多个接口吗&#xff1f; 必…

TSINGSEE青犀视频AI分析/边缘计算/AI算法·厨师帽检测功能——多场景高效运用

在餐饮厂房等场景中&#xff0c;为保障食品安全与卫生&#xff0c;后厨操作人员规范着装要求是必不可少的。由于后厨温度较高&#xff0c;环境较为恶劣&#xff0c;很多后厨人员为自身方便不按照规定佩戴厨师帽和着厨师服&#xff0c;为切实解决此问题&#xff0c;TSINGSEE青犀…

【FreeRTOS】【STM32】03 FreeRTOSConfig.h头文件简介与修改

基于[野火]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf FreeRTOSConfig.h头文件是FreeRTOS各项功能的打开与关闭 FreeRTOSConfig.h头文件简介 之前也说过了&#xff0c;FreeRTOSConfig.h文件可以添加在工程中任意文件夹&#xff0c;只需要在路径中添加好了就行。…

【C++初阶】前言——C++的发展简述及学习方法分享

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法&#xff1a;算法专栏 C头…

取消加考!自考专业调整,2026年起执行新计划!

就在2023年10月7日&#xff0c;广东省教育考试院发布《关于广东省高等教育自学考试专业调整有关事项的通知》&#xff0c;自学考试迎来新变化&#xff0c;本次专业调整政策性强&#xff0c;涉及面广&#xff0c;持续时间长&#xff0c;一起来看看具体说明~ 关于广东省高等教育自…

【码银送书第八期】《Python数据挖掘:入门进阶与实用案例分析》

摘要&#xff1a;本案例将主要结合自动售货机的实际情况&#xff0c;对销售的历史数据进行处理&#xff0c;利用pyecharts库、Matplotlib库进行可视化分析&#xff0c;并对未来4周商品的销售额进行预测&#xff0c;从而为企业制定相应的自动售货机市场需求分析及销售建议提供参…