一种实现EtcdJava客户端的方法及装置与流程

文档序号:16068691发布日期:2018-11-24 12:55阅读:463来源:国知局

本发明涉及软件工程领域,更具体地,涉及一种实现etcdjava客户端的方法及装置。

背景技术

java是一种跨平台的、解释型语言。java编译工具将java源代码被编译成为java字节码文件,由java虚拟机负责对java字节码文件进行解释执行。java是一门面向对象编程语言,不仅吸收了c++语言的各种优点,还摒弃了c++里难以理解的多继承、指针等概念,因此java语言具有功能强大和简单易用两个特征。java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。java可以编写桌面应用程序、web应用程序、分布式系统和嵌入式系统应用程序等。

etcd应用在分布式环境下的key/value存储服务,是一个高可用的键值存储系统,主要用于共享配置和服务发现。利用etcd的特性,应用程序可以在集群中共享信息、配置或服务发现,etcd会在集群的各个节点中复制这些数据并保证这些数据始终正确。etcd无论是在coreos还是kubernetes体系中都是不可或缺的一环。google的容器集群管理系统kubernetes、开源paas平台cloudfoundry和coreos的fleet都广泛使用了etcd。

目前的etcdjava客户端虽然有多种,但是这些客户端都存在着一些不足,如并未经过严格的测试和生产环境的验证,依赖的第三方库比较陈旧等,以至于业内没有很好的etcdjava客户端。



技术实现要素:

针对上述的技术问题,本发明提供一种实现etcdjava客户端的方法及装置。

第一方面,本发明提供一种实现etcdjava客户端的方法,包括:使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接;使用gson解析框架在java对象与http消息之间进行转换。

其中,所述方法还包括:使用client类为etcd中的每个应用程序编程接口提供至少一个与所述应用程序编程接口对应的执行方法。

其中,所述方法还包括:在etcdjava客户端与etcd之间进行异步调用。

其中,所述使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接包括:使用okhttp网络请求框架在etcdjava客户端中的client类与etcd之间建立httprestful方式的通信连接。

其中,所述使用gson解析框架在java对象与http消息之间建立转换包括:使用gson解析框架,etcdjava客户端中的消息解析类实现java对象与http消息之间的转换。

其中,所述在etcdjava客户端与etcd之间进行异步调用包括:client类对etcd的应用程序编程接口提供watch方法,以及提供回调适配器类实现etcd回调接口到okhttp回调接口的转换。

其中,所述etcd回调接口包括:onfailure和onresponse两个执行方法。

第二方面,本发明提供一种实现etcdjava客户端的装置,包括:通信模块,用于使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接;转换模块,用于使用gson解析框架在etcdjava客户端与http消息之间进行转换;

第三方面,本发明提供一种实现etcdjava客户端的装置,其特征在于,包括:至少一个处理器;以及与所述处理器通信连接的至少一个存储器,其中,所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至7任一所述的方法。

第四方面,本发明提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至7任一所述的方法。

本发明提供的一种实现etcdjava客户端的方法及装置,通过使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接,以及使用gson解析框架在java对象与http消息之间建立转换,从而得到轻量级的etcdjava客户端,并且okhttp网络请求框架和gson解析框架都得到了生产环境的检验,使得通过okhttp网络请求框架和gson解析框架构建的etcdjava客户端具有较高的健壮性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的实现etccdjava客户端的方法的流程图;

图2为本发明实施例提供的实现etccdjava客户端的装置的结构框图;

图3为本发明另一实施例提供的实现etccdjava客户端的装置的结构框图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的实现etccdjava客户端的方法的流程图,如图1所示,该方法包括:s1,使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接;s2,使用gson解析框架在java对象与http消息之间进行转换。

其中,okhttp网络请求框架是一个处理网络请求的开源项目,是安卓端的轻量级框架,由移动支付square公司贡献,用于替代httpurlconnection和apachehttpclient。

其中,gson解析框架是google提供用于java对象和json数据之间进行转换的java类库,可以把json字符串与java对象进行互转。gson解析框架的优势在于:快速高效、面向对象、只需要少量的代码就可以解析,实现起来方便简洁。

其中,json是javascriptobjectnotation,是一种轻量级的数据交换格式。

其中,超文本传输协议(hypertexttransferprotocol,http)是互联网上应用最为广泛的一种网络协议。所有的www文件都必须遵守这个标准。设计http最初的目的是为了提供一种发布和接收html页面的方法。1960年美国人tednelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了http超文本传输协议标准架构的发展根基。

具体地,在实现etcdjava客户端时,通过okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接,使得etcdjava客户端能够避免从零开始开发http请求与处理功能;并且okhttp社区比较活跃,问题修复比较快,从而使得etcdjava客户端具有健壮性,这是其他etcdjava客户端不具有的。由于etcd返回的http消息是json格式的字符串,使用google开源的优秀json解析库gson在java对象与http消息之间建立转换功能,方便开发人员以面向对象的思想与etcd进行交互。

在本发明实施例中,通过使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接,以及使用gson解析框架在java对象与http消息之间建立转换,从而得到轻量级的etcdjava客户端,并且okhttp网络请求框架和gson解析框架都得到了生产环境的检验,使得通过okhttp网络请求框架和gson解析框架构建的etcdjava客户端具有较高的健壮性。

在上述实施例的基础上,所述方法还包括:使用client类为etcd中的每个应用程序编程接口提供至少一个与所述应用程序编程接口对应的执行方法。

其中,client类是整个etcdjava客户端的核心类,为开发者提供与etcd交互的统一应用程序编程接口。

其中,应用程序编程接口(applicationprogramminginterface,api)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码或理解内部工作机制的细节。

具体地,在实现etcdjava客户端时,需要定义etcdjava客户端支持的etcd应用程序编程接口,即为etcd应用程序编程接口提供一个或多个与该应用程序编程接口对应的执行方法,例如,以etcdv2版本为例进行说明,但并不用于限制本发明的保护范围。实现的etcdjava客户端支持etcdv2版本中的所有api,例如,描述etcd的setapi,即对某个键设置值,例如,为message键设置helloword值,则其描述为:

为了方便开发人员使用,对于etcdv2版本的每个api,etcdjava客户端都有对应于该api的方法,例如,以etcdv2版本中为键(key)设置值(value)的api为例描述这种对应关系,但并不用于限制本发明的保护范围。

etcdjava客户端中的client类(即etcdclient类)其提供set方法对应etcd提供的setapi,etcdclient类中的set方法如下所示:

publicvoidset(stringkey,stringvalue)

该方法有两个参数,分别是string类型的键(key),string类型的值(value),提供与etcdv2版本的setapi相同的语义,即为etcd中的某个key设置value。同时etcdclient类中也提供了重载的set方法,如下:

publicvoidset(stringkey,stringvalue,intttl)

提供为某个键设置值的同时,对这个键设置过期时间,对于过期的键,etcd会自动的进行清除。

publicvoidset(stringkey,stringvalue,intttl,

booleanprevexist)

提供在某个键存在的情况下,设置是否更新这个键,同时支持为这个键设置过期时间。

本发明实施例中,通过使用etcdclient类为etcd中的每个应用程序编程接口提供一个或多个与所述应用程序编程接口对应的执行方法,方便开发者能够较方便的使用etcdjava客户端,并且保持与etcdv2api完全一致的语义,所以开发者在了解etcdv2api文档的情况下就可以使用该etcdjava客户端。

在上述实施例的基础上,所述方法还包括:在etcdjava客户端与etcd之间进行异步调用。

其中,异步调用(asynchronouscall)是一个可以无需等待被调用函数的返回值就让操作继续进行的方法。

具体地,大部分的etcdjava客户端都没有提供给开发者异步调用etcd的功能,从而导致了etcdjava客户端不能很好的支持waitapi,即监听某个key的变化。通过在etcdjava客户端与etcd之间进行异步调用,如果etcdjava客户端对监听的key进行写操作,则监听该key的客户端则会收到通知,因此,异步执行etcdapi能让开发人员实时了解到key的变化情况。

在本发明实施例中,通过在etcdjava客户端与etcd之间进行异步调用,使得etcdjava客户端的性能得以提高。

在上述实施例的基础上,所述使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接包括:使用okhttp网络请求框架在etcdjava客户端中的client类与etcd之间建立httprestful(符合rest设计风格的)方式的通信连接。

其中,restful是一种软件架构风格,是设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

其中,rest(representationalstatetransfer,简称rest)描述了一个架构样式的网络系统,比如web应用程序。在目前主流的三种web服务交互方案中,rest相比于简单对象访问协议(simpleobjectaccessprotocol,soap)以及xml-rpc更加简单明了,无论是对url的处理还是对payload的编码,rest都倾向于用更加简单轻量的方法设计和实现。值得注意的是rest并没有一个明确的标准,而更像是一种设计的风格。

具体地,由于etcd提供的api是httprestful方式的,而etcdclient类在okhttp网络请求框架上进行了封装,使得java开发人员无需关心与etcd进行http通信的具体细节,而只要调用etcdclient类提供的与etcdv2版本的api相同语义的方法,即可完成通过http方式调用etcdv2版本的api相同的功能。虽然其他的etcdjava客户端也能提供同样的功能,但是本发明实施例提供的方法依赖的是okhttp网络请求框架,而其他的etcdjava客户端依赖的网络请求框架还相对陈旧,没有okhttp框架优秀,有的则依赖netty这一网络通信框架,虽然netty是非常优秀的网络通信框架,但是对于仅仅支持etcdv2api的etcdjava客户端来说则没那么必要因为okhttp相比netty更加的轻量简洁。

在本发明实施例中,通过使用okhttp网络请求框架在etcdclient类与etcd之间建立httprestful方式的通信连接,使得etcdjava客户端更加轻量简洁。

在上述实施例的基础上,所述使用gson解析框架在java对象与http消息之间建立转换包括:使用gson解析框架,etcdjava客户端中的消息解析类实现java对象与http消息之间的转换。

其中,消息解析类为etcdmessageparser类,是etcdjava客户端中的一个类,parser(解析器)是指一个程序,通常是编译器的部分,接收输入的顺序源程序指令、交互式联机命令、标记或者一些其它定义的接口,将它们打破分成几个部分(例如名词(对象),动词(方法)和他们的属性或者选项),然后能够被其它的编程控制(如在编译器中的其它组成)。解析器也能用于检查是否所有的已经提供的输入都是必要的。

具体地,在etcdjava客户端与http消息之间建立转换功能时,消息解析类(即etcdmessageparser类)依赖gson解析框架提供java对象到http消息之间的转换工作。为了方便java开发人员能够以面向对象的思想与etcd进行交互,对etcd返回的消息内容提供了java类描述,即etcdnode和etcdresult两类。

etcdnode类如下:

这里省略了set/get方法,key为etcd中的键,createindex和modifiedindex与etcd中的createindex和modifiedindex对应,开发人员无需关心。value是key对应的值;expiration是当前key的过期时间;unix时间戳的字符串表示形式;ttl是key的过期时间,单位是秒;dir表示当前节点是否是逻辑上的目录,对于目录节点可以包含子节点;nodes表示当前目录下的所有子节点。etcdnode对etcd中的节点的概念进行了描述。

etcdresult类如下:

同样省略了set/get方法,etcdresult对etcd的消息对象进行描述,其中action表示与etcd交互的命令,例如,请求的api,如setapi;node表示当前节点的状态;prevnode表示etcd在执行当前操作之前的节点的状态;errorcode对应etcd定义的错误码;message表示在当前操作错误的情况下的错误信息;cause表示错误的原因;index对应etcd的index。

etcdmessageparser类的职责就是提供java对象与http消息之间的转换,由于etcd返回的http消息是json格式的字符串,etcdmessageparser类依赖gson解析框架实现http消息与java对象之间的转换,并提供了异常检验功能。

在本发明实施例中,通过etcdmessageparser类依赖gson解析框架实现java对象与http消息之间的转换,方便java开发人员以面向对象的思考方式编程。

在上述实施例的基础上,所述在etcdjava客户端与etcd之间进行异步调用包括:client类对etcd的应用程序编程接口提供watch方法,以及提供回调适配器类实现etcd回调接口到okhttp回调接口的转换。所述etcd回调接口包括:onfailure和onresponse两个执行方法。

其中,调适配器类为okhttp3callbackadapter类,是etcdjava客户端中的一个类,adapter(适配器)是将一个类的接口变换成客户端所期待的一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

其中,watch方法是指异步执行订阅etcd中键的变化事件,当指定键的状态发送变化时,回调函数会回调执行。

具体地,client类(即etcdclient类)对etcd的应用程序编程接口提供了watch方法,如下:

publicvoidwatch(stringkey,etcdcallbackcallback)

该接口的作用是异步执行订阅一个key的变化事件,当指定的key的状态发生变化的时候,callback提供的回调函数会回调执行。etcdclient类在实现这种异步操作的功能上借助了okhttp的异步功能,并提供了回调适配器类(即okhttp3callbackadapter类)完成etcd回调接口(即etcdcallback接口)到okhttp内部提供的回调接口的转换工作,从而避免开发者只关注业务逻辑。使用etcdjava客户端的开发人员将处理逻辑编写到etcdcallback接口对应的函数中,然后调用watch方法,etcdclient类负责命令的执行,当开发人员watch的key发生变化后,etcdclient类会接到通知,然后回调etcdcallback方法,完成对开发人员的异步通知。etcdcallback的接口定义如下,

该接口有两个执行方法,分别是onfailure和onresponse。etcdclient类在执行异步操作的时候,如果执行过程中出现异常,则会调用onfailure执行方法并将错误信息告知开发人员。如果执行成功,则会调用onresponse执行方法将结果返回给开发人员。这样开发人员只需要实现etcdcallback接口即可。

在本发明实施例中,通过etcdclient类对etcd的应用程序编程接口提供watch方法,以及提供okhttp3callbackadapter类实现etcd回调接口到okhttp回调接口的转换,从而实现etcdjava客户端与etcd之间的异步调用功能,提高了etcdjava客户端的性能。

图2为本发明实施例提供的实现etccdjava客户端的装置的结构框图,如图2所示,该装置包括:通信模块201和转换模块202。通信模块201用于使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接;转换模块202用于使用gson解析框架在etcdjava客户端与http消息之间建立进行功能。

具体地,在实现etcdjava客户端时,通信模块201通过okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接,使得etcdjava客户端能够避免从零开始开发http请求与处理功能;并且okhttp社区比较活跃,问题修复比较快,从而使得etcdjava客户端具有健壮性,这是其他etcdjava客户端不具有的。由于etcd返回的http消息是json格式的字符串,转换模块202使用google开源的优秀json解析库gson在java对象与http消息之间建立转换,方便开发人员以面向对象的思想与etcd进行交互。

在本发明实施例中,通过通信模块使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接,以及转换模块使用gson解析框架在java对象与http消息之间建立转换,从而得到轻量级的etcdjava客户端,并且okhttp网络请求框架和gson解析框架都得到了生产环境的检验,使得通过okhttp网络请求框架和gson解析框架构建的etcdjava客户端具有较高的健壮性。

图3为本发明另一实施例提供的实现etcdjava客户端的装置的结构框图,如图3所示,该识别装置包括:处理器301、存储器302和总线303。

其中,处理器301和存储器302通过总线303完成相互间的通信;所述处理器301用于调用所述存储器302中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接;使用gson解析框架在java对象与http消息之间建立转换。

在另一实施例中,提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:使用okhttp网络请求框架在etcdjava客户端与etcd之间建立通信连接;使用gson解析框架在java对象与http消息之间建立转换。

上述各实施例提供的实现etcdjava客户端的方法及装置,实现的etcdjava客户端中的etcdclient类依赖etcdmessageparser类对消息进行编码与解析,即提供java对象与http消息之间的转换工作;依赖okhttp3callbackadapter类提供给开发者与etcd进行异步调用的交互方式,例如,监听etcd上的某个key的变化,当key发生变化时,etcdclient类异步通知开发人员;依赖okhttp这一优秀的开源网络请求框架,与etcd之间进行httprestful方式的通信。

因此,实现的etcdjava客户端支持etcdv2版本中的所有的api,即为每个etcdv2版本的api都提供了一个或多个重载的执行方法,方便开发者能够容易使用etcdjava客户端,并且保持与etcdv2api完全一致的语义,所以开发者在了解etcdv2api文档的情况下就可以使用etcdjava客户端。并且基于请求框架okhttp和解析框架gson构建的etcdjava客户端具有轻量级和健壮性的特点。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1