最近在一个项目中,需要使用到etcd集群来实现服务发现的功能,目的是统一管理相应的服务资源,同时也可对资源做一定的负载均衡策略。然而,项目中使用的技术栈是C++语言,github上没有合适的C++开源的etcd客户端。于是需要在etcd和应用组件间加上一个etcd的代理层,利用etcd代理来沟通彼此。
etcd代理模块实现的思路:
etcd代理组件作为客户端与etcd集群建立TCP长连接,并通过区分不同的指令来与集群做不同的消息交互(数据形式:cmd+payload)。同时暴露一些接口给应用层调用,发送一些指令到集群,如注册和监听相应的服务信息。当etcd代理接收到etcd集群发送回来的tcp包时,使用回调函数,或C++信号与槽函数的关系来调用应用层的处理接口,从而可更新服务信息。

主要实现的细节和方法:
1、在etcd代理内部维持一个循环,不断等待并处理epoll事件,监听socket消息
2、定时向etcd发送心跳消息,保持socket长连接
3、通信数据格式可采用struct+Json的形式(struct用于传相关头信息及cmd,而json则为具体的数据)
4、etcd代理类采用单例模式,提供统一的对象访问接口(static instance())
5、回调函数的构建有两种方式:
    1.在etcd代理中创建一个接口类,包含相应的回调函数(虚函数),而应用层直接继承该接口类,并实现虚函数即可。etcd代理类内部维护一个接口类的指针。
    2.利用c++中的信号与槽,相应头文件“sigslot.h”,在应用层建立信号与槽函数的关联后,通过发送信号,即可实现对应用层槽函数的调用。

最新文章

  1. ActionMapping
  2. python---tcp/ip网络编程
  3. 第三个Sprint冲刺第九天
  4. JAVA基础学习day23--GUI基础
  5. 配置超级用户口令(Cisco IOS系统)
  6. SAE J2534 Pass-Thru API
  7. Hide Xcode8 strange log.
  8. H TML5 之 (5) 一个在线画图板
  9. MongoDB权限提升漏洞(CVE-2013-4650)
  10. 接口文档神器之apidoc
  11. 一些C++的语法
  12. 带着新人学springboot的应用10(springboot+定时任务+发邮件)
  13. JAVA关键字及作用
  14. dubbo入门学习 三 dubbo简介
  15. nginx部署django应用
  16. ubuntu多版本cuda并存与切换【两个博客链接】
  17. rxjs简单入门
  18. C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子
  19. PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数
  20. 第二十八节:Java基础-进阶继承,抽象类,接口

热门文章

  1. JavaWeb -- Servlet运行过程 和 细节
  2. Java -- AWT 画图,图像处理
  3. css的伪类选择器的使用
  4. linux应用之make命令详解
  5. linux下安装rpm格式的mysql
  6. struts2--标签取值
  7. TYVJ 1094 矩形分割
  8. Tomcat配置MySql连接池问题
  9. Java如何调用dll
  10. saltstack集中化管理平台