使用C/C++ API接口操作 Zookeeper 数据

ZooKeeper 支持 JavaC 的API接口。本文将介绍使用 C/C++ 语言客户端库的编译安装和使用入门。

一、编译安装

PS:就在上一篇文章还觉得安装和配置 jdkmaven 麻烦,所以当时选择 apache-zookeeper-[version]-bin.tar.gz 的版本。然而,本文编译 ZookeeperC/C++ API 动态库,还是避免不了安装 jdkmaven
出来混,总是要还的 (๑•̌.•๑)

1.安装依赖

安装jdk(建议11及以上,实测使用 jdk1.8 编译Zookeeper时会报错!!)

# 依赖Java11
[root@Ali ~]# yum install -y java-11-openjdk.x86_64 
[root@Ali ~]# yum install -y java-11-openjdk-devel.x86_64 
[root@Ali ~]# yum install -y java-11-openjdk-headless.x86_64
# 查看java安装
[root@Ali ~]# rpm -qa | grep jdk java-11-openjdk-devel-11.0.23.0.9-2.el7_9.x86_64copy-jdk-configs-3.3-11.el7_9.noarchjava-11-openjdk-11.0.23.0.9-2.el7_9.x86_64java-11-openjdk-headless-11.0.23.0.9-2.el7_9.x86_64

安装maven

从 maven 官方下载地址 下载需要的 maven 版本(本文以 apache-maven-3.9.6 版本安装为例)

# 下载 apache-maven-3.9.6-bin.tar.gz
[root@Ali ~]# wget https://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz
[root@Ali ~]# tar xzvf apache-maven-3.9.6-bin.tar.gz
[root@Ali ~]# mv apache-maven-3.9.6 /usr/local/maven# 设置 PATH 环境变量: 将 /usr/local/maven/bin/ 添加到PATH
[root@Ali ~]# vim /etc/bash
PATH=/usr/local/maven/bin/:$PATH
export PATH# 查看版本
[root@Ali ~]# mvn -v
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: /usr/local/maven
Java version: 11.0.23, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.105.1.el7.x86_64", arch: "amd64", family: "unix"

安装其他依赖

# 安装 cppunit
[root@Ali ~]# yum install cppunit -y
[root@Ali ~]# yum install cppunit-devel -y

2.编译API动态库

# 下载源码
[root@Ali ~]# wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2.tar.gz
[root@Ali ~]# tar xzvf apache-zookeeper-3.9.2.tar.gz# 在zookeeper-jute 执行 mvn compile
[root@Ali ~]# cd apache-zookeeper-3.9.2/zookeeper-jute
[root@Ali zookeeper-jute]# mvn compile
# ... ...
[INFO] Compiling 108 source files to /root/apache-zookeeper-3.9.2/zookeeper-jute/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  09:36 min
[INFO] Finished at: 2024-05-22T16:45:37+08:00
[INFO] ------------------------------------------------------------------------# 切换到 zookeeper-client/zookeeper-client-c, 执行 autoreconf -if
[root@Ali zookeeper-jute]# cd ../zookeeper-client/zookeeper-client-c
[root@Ali zookeeper-client-c]# autoreconf -if# 编译安装
[root@Ali zookeeper-client-c]# ./configure其中 ./configure <your-options>  可选项:--enable-debug Enables optimization and enables debug info compiler options. (Disabled by default.)--without-syncapi Disables Sync API support; zookeeper_mt library won't be built. (Enabled by default.)--disable-static Do not build static libraries. (Enabled by default.)--disable-shared Do not build shared libraries. (Enabled by default.)[root@Ali zookeeper-client-c]# make
[root@Ali zookeeper-client-c]# make check
[root@Ali zookeeper-client-c]# make install

二、使用C++接口操作数据

#include <string.h>
#include <zookeeper/zookeeper.h>void watcher(zhandle_t *zh, int type, int state, const char *path, void *context) {// watcher function body
}int main() {// create zookeeper handlezhandle_t *zkhandle = zookeeper_init("localhost:12181", watcher, 20000, 0, 0, 0);if (zkhandle == nullptr) {return -1;}// create nodeint retval = 0;char buffer[128];int buffer_length = sizeof(buffer);(void)memset(buffer, 0, sizeof(buffer));struct ACL ACL_ANYONE[] = {{ZOO_PERM_ALL, ZOO_ANYONE_ID_UNSAFE}};struct ACL_vector ACL_ANYONE_VEC = {1, ACL_ANYONE};retval = zoo_create(zkhandle, "/my_node","value", 5, &ACL_ANYONE_VEC,ZOO_EPHEMERAL, buffer, sizeof(buffer)-1);if(retval == ZOK){printf("zoo_create data for /my_node is %s\n", buffer);}else{printf("zoo_create failed: code=%d\n", retval);}// get node data(void)memset(buffer, 0, sizeof(buffer));retval = zoo_get(zkhandle, "/my_node", 0, buffer, &buffer_length, nullptr);if (retval == ZOK) {printf("zoo_get data for /my_node is %s\n", buffer);}else{printf("zoo_get failed: code=%d\n", retval);}// close Zookeeper handlezookeeper_close(zkhandle);return 0;
}

运行示例

[wengjianhong@Ali testzone]$ g++ test_zookeeper.cpp --std=c++11 -lzookeeper_mt -DTHREADED -o test_zookeeper[wengjianhong@Ali testzone]$ ./test_zookeeper
2024-05-22 19:25:35,325:12819(0x7fc5fdca3880):ZOO_INFO@log_env@1250: Client environment:zookeeper.version=zookeeper C client 3.9.2
2024-05-22 19:25:35,325:12819(0x7fc5fdca3880):ZOO_INFO@log_env@1254: Client environment:host.name=Ali
2024-05-22 19:25:35,325:12819(0x7fc5fdca3880):ZOO_INFO@log_env@1261: Client environment:os.name=Linux
2024-05-22 19:25:35,325:12819(0x7fc5fdca3880):ZOO_INFO@log_env@1262: Client environment:os.arch=3.10.0-1160.105.1.el7.x86_64
2024-05-22 19:25:35,325:12819(0x7fc5fdca3880):ZOO_INFO@log_env@1263: Client environment:os.version=#1 SMP Thu Dec 7 15:39:45 UTC 2023
2024-05-22 19:25:35,325:12819(0x7fc5fdca3880):ZOO_INFO@log_env@1271: Client environment:user.name=wengjianhong
2024-05-22 19:25:35,325:12819(0x7fc5fdca3880):ZOO_INFO@log_env@1279: Client environment:user.home=/home/wengjianhong
2024-05-22 19:25:35,325:12819(0x7fc5fdca3880):ZOO_INFO@log_env@1291: Client environment:user.dir=/home/wengjianhong/testzone
2024-05-22 19:25:35,325:12819(0x7fc5fdca3880):ZOO_INFO@zookeeper_init_internal@1344: Initiating client connection, host=localhost:12181 sessionTimeout=20000 watcher=0x40087d sessionId=0 sessionPasswd=<null> context=(nil) flags=0
2024-05-22 19:25:35,326:12819(0x7fc5fa73a700):ZOO_INFO@check_events@2987: initiated connection to server 127.0.0.1:12181
2024-05-22 19:25:35,329:12819(0x7fc5fa73a700):ZOO_INFO@finalize_session_establishment@2865: session establishment complete on server 127.0.0.1:12181, sessionId=0x100024f5eba000c, negotiated timeout=20000
zoo_create data for /my_node is /my_node
zoo_get data for /my_node is value
2024-05-22 19:25:35,333:12819(0x7fc5fdca3880):ZOO_INFO@zookeeper_close@3850: Closing zookeeper sessionId=0x100024f5eba000c to 127.0.0.1:12181
2024-05-22 19:25:35,335:12819(0x7fc5fdca3880):ZOO_INFO@zookeeper_close@3872: Freeing zookeeper resources for sessionId=0x100024f5eba000c

重要说明

编译 C++ 代码的时候这里必须指定链接 lzookeeper_mt 的动态库 和 添加 -DTHREADED 编译选项。否则会导致 zoo_createzoo_get 等接口找不到。

原因:zoo_createzoo_get 等同步接口。在 zookeeper.h 的头文件中,使用 #ifdef THREADED 控制屏蔽了zoo_createzoo_get 等接口,必须使用-DTHREADED 编译选项才能使用。原文如下:

If you are building a multithreaded client, compile with -DTHREADED compiler flag to enable the multi-threaded version of the library, and then link against the zookeeper_mt library.
If you are building a single-threaded client, do not compile with -DTHREADED, and be sure to link against the_zookeeper_st_library.

更多接口使用,请参考 apache-zookeeper-3.9.2/zookeeper-client/zookeeper-client-c/include/ 目录下的 zookeeper.h 等头文件

本文参考自 Zookeeper程序开发指南 的 C Binding

在这里插入图片描述

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

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

相关文章

Leetcode刷题笔记4

1658. 将 x 减到 0 的最小操作数 1658. 将 x 减到 0 的最小操作数 - 力扣&#xff08;LeetCode&#xff09; 示例 3&#xff1a; 输入&#xff1a;nums [3,2,20,1,1,3], x 10 输出&#xff1a;5 解释&#xff1a;最佳解决方案是移除后三个元素和前两个元素&#xff08;总共…

贪心part2 买卖股票的最佳时机 跳跃游戏

122.买卖股票的最佳时机II 代码随想录 分析&#xff1a;计算相邻两天的收益&#xff0c;将正收益相加即为总的最大收益 class Solution:def maxProfit(self, prices: List[int]) -> int:res 0for i in range(len(prices)-1):if prices[i1] - prices[i] > 0:res prices…

【CAN】STM32新能源汽车CAN通信实现过程

【CAN】STM32新能源汽车CAN通信实现过程 文章目录 前言一、软件1.PA11、PA12口配置2.PB8、PB9口配置 二、接线图三、硬件原理图四、上位机总结 前言 【电机控制】直流有刷电机、无刷电机汇总——持续更新 使用工具&#xff1a; 1.控制器——STM32F103C8T6 2.仿真器——STLINK …

人工智能方面顶会

人工智能 AAAI the National Conference on Artificial Intelligence 美国人工智能协会主办 IJCAJ the International Joint Conference on Artificial Intelligence每年举办 计算机视觉 CVPR IEEE Conference on Computer Vision and Pattern Recognition ECCV European Co…

【Python搞定车载自动化测试】系列文章目录汇总

系列文章目录汇总&#xff1a; 【Python搞定车载自动化测试】——PythonRobot Framework框架实现UDS诊断自动化&#xff08;含Python源码&#xff09; 【Python搞定车载自动化测试】——Python基于周立功ZCANPRO开发刷写脚本 【Python搞定车载自动化测试】——Python基于Pytest…

Opencompass模型评测教程

模型评测 模型评测非常关键&#xff0c;目前主流的方法主要可以概括为主观评测和客观评测&#xff0c;主观评测又可以分为两种形式&#xff1a;人工判断或者和模型竞技场。客观评测一般采用评测数据集的形式进行模型评测。本教程使用Opencompass工具进行对Internlm2-7b模型进行…

29. 相似矩阵,若尔当型

文章目录 1. 相似矩阵1.1 A T A A^TA ATA正定性证明 2. 相似矩阵2.1 举例2.2 证明相似矩阵具有相同特征值 1. 相似矩阵 假设矩阵A&#xff0c;B为正定矩阵&#xff0c;那么对于任意非零列向量x来说&#xff0c;二次型 x T A x , x T B x x^TAx,x^TBx xTAx,xTBx恒为正 x T A …

网络模型-策略路由配置

在实际网络应用中&#xff0c;策略路由也是一种重要的技术手段。尽管在考试并不注重策略路由&#xff0c;但是实际上应用较多建议考生除了掌握基本的静态路由协议IP route-static&#xff0c;动态路由协议RIP、还要掌握如何配置策略路由。策略路由的基本原理:根据ACL定义的不同…

深度学习之人脸性别年龄检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着计算机视觉和深度学习技术的飞速发展&#xff0c;人脸性别年龄检测系统在多个领域展现出广…

字符串转ArrayBuffer

const arrayBuffer new ArrayBuffer(str.length)const bufferView new Uint8Array(ab) for (let i 0; i < str.length; i) {bufferView[i] str.charCodeAt(i) }【前端】失落的 ArrayBuffer - 知乎

SVG批量转为pdf超有效的方式!

最近在整理工作&#xff0c;发现ppt里面画的图智能导出svg格式无法导出pdf格式&#xff0c;由于在线的网站会把我的图片搞乱而且不想下载visio&#xff08;会把本地的word搞坏&#xff09;&#xff0c;因此琢磨出这种批量转换的方式。 1. 下载并安装Inkscape 下载链接&#xf…

使用HTTP客户端在Python中进行网页抓取——笔记

使用HTTP客户端在Python中进行网页抓取 在网页抓取的上下中&#xff0c;HTTP客户端向目标网站发送请求&#xff0c;并检索网站的HTML代码或JSON有效负载等信息。 HTTP客户端并不直接指向代码开发者&#xff0c;而是指在客户端-服务器模型中发送HTTP请求的部分。这个客户端是一…

电路仿真软件:点亮教学新篇章,十大便利助力高效学习

在信息化时代的浪潮中&#xff0c;电路仿真软件以其独特的优势&#xff0c;逐渐在教学领域崭露头角。它不仅能够帮助学生更好地理解电路知识&#xff0c;还能提升教师的教学效果。接下来&#xff0c;让我们一起探讨电路仿真软件对教学带来的十大便利。 一、直观展示电路原理 电…

Keras深度学习框架第二十四讲:KerasNLP概述

1、KerasNLP简介 KerasNLP是一个与TensorFlow深度集成的库&#xff0c;旨在简化NLP&#xff08;自然语言处理&#xff09;任务的建模过程。它提供了一系列高级API&#xff0c;用于预处理文本数据、构建序列模型和执行常见的NLP任务&#xff0c;如情感分析、命名实体识别和机器…

风控指南:国内车险欺诈呈现四大趋势

目录 车险欺诈呈现内外勾结的团伙化 防范车险欺诈需要多重合作 保险企业需要提升反欺诈能力 监管部门需要加强协同合作 2024年4月11日&#xff0c;国家金融监督管理总局官网发布国家金融监督管理总局关于《反保险欺诈工作办法&#xff08;征求意见稿&#xff09;》公开征求意见…

PCL平面多边形可视化

1、背景介绍 多边形是一个在二维平面上由直线段&#xff08;称为边或侧&#xff09;首尾顺次连接围成的封闭图形。这些直线段也称为多边形的边&#xff0c;而它们的交点称为多边形的顶点或角。在点云边缘点提取后&#xff0c;有时候需要将其进行可视化&#xff0c;如下图所示。…

【Mac】跑猫RunCat for mac(菜单栏Cpu可视化监测工具) v10.3免费版安装教程

软件介绍 RunCat是一款为菜单栏提供关键帧动画的软件。动画速度会根据Mac的CPU使用情况而变化。奔跑的小猫通过运行速度告诉您Mac的CPU使用率。 这是一款好玩的软件&#xff0c;可以为您的Mac使用添加一点小确幸。感兴趣的朋友可以试试哦。 安装步骤 1.打开安装包&#xff0…

贵州大学24计算机考研数据速览,国家重点实验室22408复试线285分!贵州大学计算机考研考情分析!

贵州大学计算机科学与技术学院坐落在贵州大学北校区&#xff08;贵阳花溪&#xff09;。 学院现有教职工139人&#xff0c;其中专职教师126人&#xff0c;教授17人&#xff0c;副教授37人&#xff0c;讲师46人&#xff0c;高级实验师4人&#xff0c;实验师17人。具有博士学位的…

诺兰电影欣赏笔记

2012&#xff1a;蝙蝠侠&#xff1a;黑暗骑士崛起&#xff08;Batman 3: The Dark Knight Rises&#xff09; 播放平台&#xff1a;优酷

Django 入门教程

1. Django简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 MVC 与 MVT 模型 MVC 模型 MVC 模式&#xff08;Model–view–controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&am…