CentOS 7 基于C 连接ZooKeeper 客户端

这篇具有很好参考价值的文章主要介绍了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
********************

 CentOS 7 基于C 连接ZooKeeper 客户端,c/c++ 学习笔记,深蓝计划,centos,zookeeper,linux

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

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等。文章来源地址https://www.toymoban.com/news/detail-716471.html

到了这里,关于CentOS 7 基于C 连接ZooKeeper 客户端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?

    客户端出现故障指的是客户端的主机发生了宕机或者断电的场景。发生这种情况的时候,如果服务端一直不会发送数据给客户端,那么服务端是永远无法感知到客户端宕机这件事的,也就是服务端的TCP连接将一直处于 ESTABLISH 状态,占用着资源。 为了避免这种情况,TCP有一个

    2024年02月16日
    浏览(46)
  • ZooKeeper客户端使用与经典应用场景

    ZooKeeper的应用场景依赖于ZNode节点特性和Watch监听机制。 常用于实现配置中心,类似的有nacos。 数据发布/订阅的一个常见的场景是配置中心,发布者把数据发布到ZooKeeper的一个或一系列的节点上,供订阅者进行数据订阅,达到动态获取数据的目的。 配置信息一般有几个特点

    2024年02月12日
    浏览(42)
  • ZooKeeper基础命令和Java客户端操作

    (1)Help (2)ls 使用 ls 命令来查看当前znode中所包含的内容 (3)ls2查看当前节点数据并能看到更新次数等数据 (4)stat查看节点状态 (5)set 1)设置节点的具体值 2)set 节点 value值 set /test atguigu (6)get 1)获得节点的值 2)get 节点 (7)create 1)普通创建 create /test demo001

    2024年02月10日
    浏览(51)
  • Java客户端_zkclient库操作Zookeeper

    使用zookeeper遇到问题: 重复注册watcher session失效重连 异常处理(删除节点不能有子节点,新增节点必须有父节点等) zkclient是Github上一个开源的Zookeeper客户端,在Zookeeper原生 API接口之上进行了包装,是一个更加易用的Zookeeper客户端。同时Zkclient在内部实现了诸如Session超时重

    2024年02月07日
    浏览(60)
  • 我的世界Bukkit插件开发-第一章-初始环境搭建-搭建基于spigot核心的服务器-并连接客户端......

    基于Spigot核心的插件开发 本章实现本地成功搭建私服并连接客户端 前置开发工具:IDEA JDK环境-JKD-17 构建工具:maven 必备idea插件:Minecraft Development 服务器核心: Spigot-1.20.jar mc客户端 小部分内容来自AI大模型,如需深入,请联系博主或自行了解 手工不易,且看且珍惜 首次开始

    2024年03月21日
    浏览(55)
  • 基于STM32F103,利用W5500芯片实现TCP客户端连接TCP服务器的实践

    尊敬的读者,您好!在这篇文章中,我们将一起深入了解如何使用STM32F103和W5500芯片,实现TCP客户端连接到TCP服务器的过程。在详细的步骤中,我们不仅会给出相关的理论介绍,同时也会提供实战代码以供大家参考和学习。希望大家在阅读完这篇文章后,能够有所收获。 实战

    2024年02月11日
    浏览(37)
  • ZooKeeper技术细节_zookeeper and 服务器 and 客户端 and 数据节点

    方法入参EventType指定触发事件的类型:data变更还是childNodes变更等。 将KeeperState、EventType、Path new 到WatchedEvent实例中 根据Path路径从watchTable中找到所有对应的Watcher,为空continue,不为空时再iterator.remove掉,这样Watcher触发一次就失效了 从Map中找到的所有Watcher执行一遍其process方

    2024年04月22日
    浏览(48)
  • openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数

    102.1 背景信息 当用户连接数达到上限后,无法建立新的连接。因此,当数据库管理员发现某用户无法连接到数据库时,需要查看是否连接数达到了上限。控制数据库连接的主要以下几种选项。 全局的最大连接数:由运行参数max_connections指定。 某用户的连接数:在创建用户时

    2024年02月07日
    浏览(63)
  • Zookeeper中的客户端配置认证(zoo_client.conf)

    Zookeeper中的客户端配置认证可以使用两种方法:digest和Kerberos。 客户端鉴权配置 该配置是用于启用Zookeeper SASL认证提供程序的选项,它是Zookeeper中一种基于Kerberos的身份验证方式。SASL(Simple Authentication and Security Layer)是一种通用的安全联接层协议,通常用于安全认证。 具体

    2024年02月13日
    浏览(60)
  • 【Zookeeper源码走读】第三章 服务器处理客户端请求的流程

    前一篇文章,已经大致介绍了Server的启动流程,在NIOServerCnxnFactory.start()方法中,启动了多个线程,其中就有接收socket报文的线程,代码如下: 注意这里,acceptThread是接收socket的线程(AcceptThread),acceptThread的初始化是在NIOServerCnxnFactory.configure()中实现的: NIOServerCnxnFactory.confi

    2024年02月02日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包