H04L29/08 H04L12/863
1.一种基于Redis的Web Service申请外部服务的方法,其特征在于,包括:
前端向后端服务器发送外部服务请求,返回并设定服务响应查询时间;
后端服务器接收前端发送的外部服务请求,并判断对应的Redis缓存队列的长度是否 对应请求添加时序,如果是则将所述外部服务请求添加到所述Redis缓存队列结尾;
外部服务单元判断所述Redis缓存队列的长度是否对应请求读取时序,如果是则读取 所述Redis缓存队列末尾的外部服务请求,并将该外部服务请求的服务响应结果添加到所 述Redis缓存队列末尾;
到达所述服务响应查询时间时,所述前端发送查询请求,驱动后端服务器定期监视所 述Redis缓存队列,判断所述Redis缓存队列的长度是否对应响应读取时序,如果是则读取 所述Redis缓存队列末尾的服务响应结果。
2.如权利要求1所述的基于Redis的Web Service申请外部服务的方法,其特征在于:
当所述Redis缓存队列的长度为奇数时对应请求添加时序,当所述Redis缓存队列的长 度为偶数时对应请求读取时序,当所述Redis缓存队列的长度为奇数时对应响应读取时序; 或者,
当所述Redis缓存队列的长度为偶数时对应请求添加时序,当所述Redis缓存队列的长 度为奇数时对应请求读取时序,当所述Redis缓存队列的长度为偶数时对应响应读取时序。
3.如权利要求1或2所述的基于Redis的Web Service申请外部服务的方法,其特征在 于,当后端服务器接收前端发送的外部服务请求时,如果不存在对应的Redis缓存队列,则 建立对应的Redis缓存队列并设置所述Redis缓存队列的生命周期。
6.如权利要求3所述的基于Redis的Web Service申请外部服务的方法,其特征在于,所 述Redis缓存队列的键值与所述前端和/或所述外部服务请求对应。
4.如权利要求1所述的基于Redis的Web Service申请外部服务的方法,其特征在于,当 到达所述服务响应查询时间且所述Redis缓存队列的长度不对应响应读取时序时,则所述 前端返回并设定下一次服务响应查询时间。
5.如权利要求1或4所述的基于Redis的Web Service申请外部服务的方法,其特征在 于,当到达所述服务响应查询时间且所述Redis缓存队列过期已删除时,则所述前端返回请 求失败消息。
7.如权利要求1或2所述的基于Redis的Web Service申请外部服务的方法,其特征在 于,所述前端采用Ajax发送外部服务请求并设定服务响应查询时间。
8.如权利要求1或2所述的基于Redis的Web Service申请外部服务的方法,其特征在 于,当到达所述Redis缓存队列的生命周期时,删除所述Redis缓存队列。
9.一种基于Redis的Web Service申请外部服务的系统,其特征在于,包括后端服务器、 Redis数据库和外部服务单元,其中:
所述后端服务器,用于接收前端发送的外部服务请求,并判断对应的Redis缓存队列的 长度是否对应请求添加时序,如果是则将所述外部服务请求添加到所述Redis缓存队列结 尾;
所述Redis数据库,用于建立并维护所述Redis缓存队列;
所述外部服务单元,用于判断所述Redis缓存队列的长度是否对应请求读取时序,如果 是则读取所述Redis缓存队列末尾的外部服务请求,并将该外部服务请求的服务响应结果 添加到所述Redis缓存队列末尾;
所述后端服务器,还用于在到达服务响应查询时间时判断所述Redis缓存队列的长度 是否对应响应读取时序,如果是则读取所述Redis缓存队列末尾的服务响应结果。
10.如权利要求9所述的基于Redis的Web Service申请外部服务的系统,其特征在于:
当所述Redis缓存队列的长度为奇数时对应请求添加时序,当所述Redis缓存队列的长 度为偶数时对应请求读取时序,当所述Redis缓存队列的长度为奇数时对应响应读取时序; 或者,
当所述Redis缓存队列的长度为偶数时对应请求添加时序,当所述Redis缓存队列的长 度为奇数时对应请求读取时序,当所述Redis缓存队列的长度为偶数时对应响应读取时序。
本发明属于计算机技术领域,更具体地,涉及一种基于Redis的WebService申请外 部服务的方法与系统。
Web Service是一个平台独立的、低耦合的、自包含的、基于可编程Web的应用程 序,可使用开放的可扩展标记语言(eXtensible Markup Language,XML)标准来描述、发布、 发现、协调和配置这些应用程序,以用于开发分布式的互操作的应用程序。Web Service技 术,能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可 相互交换数据或集成。依据Web Service规范实施的应用之间,无论它们所使用的语言、平 台或内部协议是什么,都可以相互交换数据。Web Service是自描述、自包含的可用网络模 块,可以执行具体的业务功能。Web Service也很容易部署,因为它们基于一些常规的产业 标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP(Hyper Text Transfer Protocol,超文本传输协议),Web Service减少了应用接口的花费。Web Service 为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
Web 2.0时代的平台设计,出现后端提供多种服务的特征,服务已经不仅仅局限于 由后端服务器的功能组件提供,还需要从外部组件请求服务。这就需要一个API (Application Programming Interface,应用程序编程接口),完成本地Service和这些外 部组件的交互。最常用的方式是采用REST(Representational State Transfer)和RPC (Remote Procedure Call,远程过程调用)方法,其中REST一般采用post/get,远端需要建 立Http Service以实现应答通信。而现有的RPC方案,则需要搭建复杂的框架,复杂度高,一 般适合大企业或复杂业务使用。因此,对于轻量型Web Service运用场景,有必要提供一种 简易的Service远程调用服务方案。
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于Redis的Web Service申请外部服务的方法,其目的在于针对轻量型Web service的运用场景,提供一种 基于非阻塞的简易的service远程调用服务方案,由此解决现有技术中Web平台获取外部服 务部署复杂的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于Redis的Web Service 申请外部服务的方法,包括:
前端向后端服务器发送外部服务请求,返回并设定服务响应查询时间;
后端服务器接收前端发送的外部服务请求,并判断对应的Redis缓存队列的长度 是否对应请求添加时序,如果是则将所述外部服务请求添加到所述Redis缓存队列结尾;
外部服务单元判断所述Redis缓存队列的长度是否对应请求读取时序,如果是则 读取所述Redis缓存队列末尾的外部服务请求,并将该外部服务请求的服务响应结果添加 到所述Redis缓存队列末尾;
到达所述服务响应查询时间时,所述前端发送查询请求,驱动后端服务器定期监 视所述Redis缓存队列,判断所述Redis缓存队列的长度是否对应响应读取时序,如果是则 读取所述Redis缓存队列末尾的服务响应结果。
本发明实施例所提供的方法,通过Redis缓存队列的长度来判断队列当前所处的 时序状态,确定队列中的元素是服务请求还是服务响应,从而通过队列长度来实现服务请 求的添加和读取、服务响应的添加和查询,能够简便的实现Web Service申请外部服务;另 外前端通过定时查询服务响应,可及时的实现响应结果的查询,并且减小通信开销;并且本 发明通过Redis缓存队列来存储并维护服务请求和响应,在实现时只需额外部署redis并提 供本发明方法的相应接口即可实现,从而实现本地Web服务器与外部服务元件的交互,实现 方式简单,对于简单的外部服务交互更加适用。本发明通过前端定时查询数据库获得服务 响应结果,从而可以实现在不刷新页面的情况下由前端主动获取应答。
本发明的一个实施例中,当所述Redis缓存队列的长度为奇数时对应请求添加时 序,当所述Redis缓存队列的长度为偶数时对应请求读取时序,当所述Redis缓存队列的长 度为奇数时对应响应读取时序;或者,
当所述Redis缓存队列的长度为偶数时对应请求添加时序,当所述Redis缓存队列 的长度为奇数时对应请求读取时序,当所述Redis缓存队列的长度为偶数时对应响应读取 时序。
本发明实施例中,将后端服务器和外部服务单元应答索引奇偶固定,既可保证序 列,又可通过奇偶数迅速判定是否有请求或者应答。
本发明的一个实施例中,当后端服务器接收前端发送的外部服务请求时,如果不 存在对应的Redis缓存队列,则建立对应的Redis缓存队列并设置所述Redis缓存队列的生 命周期。
本发明实施例中,利用有生命周期的Redis缓存队列作实现信令交互,实现内存有 效回收,降低维护成本。
本发明的一个实施例中,当到达所述服务响应查询时间且所述Redis缓存队列的 长度不对应响应读取时序时,则所述前端返回并设定下一次服务响应查询时间。
本发明实施例中,通过前端定时查询服务响应,并且该查询周期可根据实际情况 灵活设定,从而可以保证响应的及时性,并且能在服务响应未返回时继续定时进行下一次 查询。
本发明的一个实施例中,当到达所述服务响应查询时间且所述Redis缓存队列过 期已删除时,则所述前端返回请求失败消息。
本发明实施例中,利用有生命周期的Redis缓存队列作实现信令交互,实现内存有 效回收,以降低维护成本。那么Redis缓存队列在到达生命周期后会删除,此时前端查询不 到相应对列时则返回请求失败消息。可以由前端再次发起下一次服务请求。
本发明的一个实施例中,所述Redis缓存队列的键值与所述前端和/或所述外部服 务请求对应。
本发明实施例中,如果只有一个后端服务器和一个外部服务单元,则只需一个 Redis缓存队列对应该后端服务器和该外部服务单元之间的服务请求与响应。如果存在多 个多个后端服务器和多个外部服务单元,则可能存在多个Redis缓存队列对应不同的后端 服务器和不同外部服务单元之间的服务请求与响应。此时,需要通过键值来对应不同的后 端服务器和该外部服务单元,以实现服务请求的添加和读取、服务响应的添加和查询与队 列的对应,保证服务的准确性。
本发明的一个实施例中,所述前端采用Ajax发送外部服务请求并设定服务响应查 询时间。
本发明实施例中,基于Ajax嵌套实现定时轮询,可以在无需重新加载整个网页的 情况下,更新部分网页的数据,通过在后台与服务器进行少量数据交换,使网页实现异步更 新,减少了通信开销。
本发明的一个实施例中,当到达所述Redis缓存队列的生命周期时,删除所述 Redis缓存队列。
本发明实施例中,利用有生命周期的Redis缓存队列作实现信令交互,在Redis缓 存队列到达生命周期时,删除队列,实现内存有效回收,降低维护成本。
按照本发明的另一方面,提供了一种基于Redis的Web Service申请外部服务的系 统,包括后端服务器、Redis数据库和外部服务单元,其中:
所述后端服务器,用于接收前端发送的外部服务请求,并判断对应的Redis缓存队 列的长度是否对应请求添加时序,如果是则将所述外部服务请求添加到所述Redis缓存队 列结尾;
所述Redis数据库,用于建立并维护所述Redis缓存队列;
所述外部服务单元,用于判断所述Redis缓存队列的长度是否对应请求读取时序, 如果是则读取所述Redis缓存队列末尾的外部服务请求,并将该外部服务请求的服务响应 结果添加到所述Redis缓存队列末尾;
所述后端服务器,还用于在到达服务响应查询时间时判断所述Redis缓存队列的 长度是否对应响应读取时序,如果是则读取所述Redis缓存队列末尾的服务响应结果。
本发明实施例所提供的系统,通过Redis缓存队列的长度来判断队列当前所处的 时序状态,从而确定队列中的元素是服务请求还是服务响应,从而通过队列长度来实现服 务请求的添加和读取、服务响应的添加和查询,从而简便的实现了Web Service申请外部服 务;另外前端通过定时查询服务响应,可及时的实现响应结果的查询,并且减小通信开销; 并且本发明通过Redis缓存队列来存储并维护服务请求和响应,只需额外部署redis并提供 本发明方法的相应接口即可实现,从而实现本地Web服务器与外部服务元件的交互,实现方 式简单,对于简单的外部服务交互更加适用。
本发明的一个实施例中,当所述Redis缓存队列的长度为奇数时对应请求添加时 序,当所述Redis缓存队列的长度为偶数时对应请求读取时序,当所述Redis缓存队列的长 度为奇数时对应响应读取时序;或者,
当所述Redis缓存队列的长度为偶数时对应请求添加时序,当所述Redis缓存队列 的长度为奇数时对应请求读取时序,当所述Redis缓存队列的长度为偶数时对应响应读取 时序。
本发明实施例中,将后端服务器和外部服务单元应答索引奇偶固定,既可保证序 列,又可通过奇偶数迅速判定是否有请求或者应答。巧妙地利用了列队的长度来确认队列 元素。
图1是本发明实施例中基于Redis的Web Service申请外部服务的实施场景示意 图;
图2是本发明实施例中基于Redis的Web Service申请外部服务的方法的流程示意 图;
图3是本发明实施例中服务请求发起流程示意图;
图4是本发明实施例中服务请求响应流程示意图;
图5是本发明实施例中多个Redis缓存队列的键值对应示意图。
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对 本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要 彼此之间未构成冲突就可以相互组合。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日 志型、Key-Value数据库,并提供多种语言的API。
Ajax即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种 创建交互式网页应用的网页开发技术。Ajax是一种用于创建快速动态网页的技术,是一种 在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行 少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情 况下,对网页的某部分进行更新。
前端,一般对应我们写的html、javascript等网页语言,作用在前端网页。后端,一 般对应jsp、javaBean、dao层、action层和service层的业务逻辑代码。
后端服务器,本发明中是指Web Server,中文名称叫网页服务器或Web服务器。WEB 服务器也称为WWW(World Wide Web)服务器,主要功能是提供网上信息浏览服务。
Web平台获取外部服务的接口方法。常用的方法是REST和RPC,RPC部署较为复杂, 而REST模式消息耦合性较弱。本发明利用Redis数据库的特性,将Redis作为信令缓存,以实 现接口功能。Redis采用kv结构,交互简单,且是内存存储,响应快设置简单。本发明的使用 只需额外部署Redis数据库,根据本发明方法所设计的接口方法,即可实现。特点是实现本 地Web服务器与外部服务单元的交互,实现方式简单,对于简单的外部服务交互更加适用。
实施例1
如图1所示,为本发明实施例中技术方案的实施场景,前端(例如浏览器)通过后端 服务器(Web服务器)请求外部服务,在后端服务器与外部服务单元之间部署有Redis数据 库,所述Redis数据库用于建立和维护Redis缓存队列,一个Redis缓存队列对应一个后端服 务器与外部服务单元之间的服务请求与服务响应。Redis缓存队列中存储有服务请求和服 务响应,服务请求与服务响应奇偶排列,从而通过队列长度即可判断队列中的元素是服务 请求还是服务响应。
实施例2
如图2所示,本发明实施例提供了一种基于Redis的Web Service申请外部服务的 方法,包括:
S1、前端向后端服务器发送外部服务请求,返回并设定服务响应查询时间;
当用户需要请求外部服务单元的服务时,可以通过前端(例如Web浏览器)利用 Ajax向后端服务器发送服务请求,当发出服务请求后可以返回(一般是立即返回)并定时, 即设定服务响应查询时间,当到达设定服务响应查询时间时,前端再利用Ajax向后端服务 器发送查询请求,以驱动后端服务器查询并返回服务响应结果。
S2、后端服务器接收前端发送的外部服务请求,并判断对应的Redis缓存队列的长 度是否对应请求添加时序,如果是则将所述外部服务请求添加到所述Redis缓存队列结尾;
当后端服务器接收前端发送的外部服务请求时,即查询Redis数据库,判断Redis 数据库中是否包含有对应的Redis缓存队列,如果没有则建立相应的Redis缓存队列,如果 有则根据Redis缓存队列的长度判断该队列当前处于什么状态。具体地,本发明中利用 Redis缓存队列的长度的奇偶来判断Redis缓存队列当前处于什么状态。
在此先对本发明中定义的几个时序进行说明:请求添加时序、请求读取时序以及 响应读取时序。当队列状态处于请求添加时序(例如奇数)时,表明此时队列最后一个元素 为服务响应元素,此时可在队列结尾添加新的服务请求;当添加了新的服务请求后队列的 长度加一(变为偶数),此时队列状态变为请求读取时序,即此时队列最后一个元素为服务 请求元素,此时外部服务单元可读取队列末尾元素即服务请求元素;外部服务单元读取服 务请求后,返回服务响应结果并在队列结尾添加服务响应结果,此时队列的长度再加一(变 为奇数),此时队列状态变为响应读取时序,即队列最后一个元素为服务响应元素,此时前 端可读取队列末尾元素(即服务响应结果)。至此一个服务请求和响应过程结束,队列又处 于请求添加时序了,队列又可以接收新的服务请求。
例如以本发明图3和图4为例,图中req表示服务请求,res表示服务响应。可以定义 为:当所述Redis缓存队列的长度为偶数时对应请求添加时序,当所述Redis缓存队列的长 度为奇数时对应请求读取时序,当所述Redis缓存队列的长度为偶数时对应响应读取时序。
当然也可以定义为:当所述Redis缓存队列的长度为奇数时对应请求添加时序,当 所述Redis缓存队列的长度为偶数时对应请求读取时序,当所述Redis缓存队列的长度为奇 数时对应响应读取时序。当然进一步地,还可以对Redis缓存队列的时序状态进行其他定 义。只要能区分出对应的队列状态即可,例如可以通过求取整除余数的方式来确定队列元 素。
进一步地,如果在后端服务器接收前端发送的外部服务请求时,如果不存在对应 的Redis缓存队列,则需要建立对应的Redis缓存队列并设置所述Redis缓存队列的生命周 期。
本发明实施例中,利用Redis的内存管理方式来管理Redis缓存队列的生命周期, 从而实现内存有效回收,降低维护成本。即在建立Redis缓存队列时就设置其生命周期,并 生命周期到达后则删除该Redis缓存队列。
具体地,在建立Redis缓存队列时,需要设置所述Redis缓存队列的键值与所述前 端和/或所述外部服务请求对应。后端服务器在添加服务请求到队列和查询服务响应结果, 外部服务单元在读取服务请求和添加服务响应结果时,均需要根据键值来查对应的 Redis缓存队列。
例如,如果只有一个后端服务器和一个外部服务单元,则只需一个Redis缓存队列 对应该后端服务器和该外部服务单元之间的服务请求与响应。而如图5所示,如果存在多个 多个后端服务器(例如图中为2)和多个外部服务单元(例如图中为3),则可能存在多个 Redis缓存队列(例如最多可为6个)对应不同的后端服务器和不同外部服务单元之间的服 务请求与响应。
例如在图5中,可能存在最多6个Redis缓存队列,可将6个Redis缓存队列的键值分 别设置为A1-B1、A2-B1、A1-B2、A2-B2、A1-B3和A2-B3,从而对应A1、A2与B1、B2、B3之间的服 务请求与响应通路。如果A1后端服务器需要向B2外部服务单元请求服务,则向队列A1-B2中 写入服务,B2外部服务单元从队列A1-B2中读取请求后将响应结果写入队列A1-B2。
S3、外部服务单元判断所述Redis缓存队列的长度是否对应请求读取时序,如果是 则读取所述Redis缓存队列末尾的外部服务请求,并将该外部服务请求的服务响应结果添 加到所述Redis缓存队列末尾;
S4、到达所述服务响应查询时间时,所述前端发送查询请求,驱动后端服务器定期 监视所述Redis缓存队列,判断所述Redis缓存队列的长度是否对应响应读取时序,如果是 则读取所述Redis缓存队列末尾的服务响应结果。
实施例3
下面以队列中奇数元素表示服务请求,偶数元素表示服务响应为例,说明本发明 方法的请求发起和结果响应流程。
如图3所示,为本发明实施例中服务请求发起流程示意图,前端发送服务请求,返 回并设定定时;后端服务器收到服务请求后,向缓存队列增加服务请求,如果队列长度为偶 数则添加,如果为奇数则不添加。例如图中队列长度为2(偶数),此时可添加服务请求req, 添加后队列长度变为3(奇数),此时外部服务单元读取服务请求req。
如图4所示,为本发明实施例中服务请求响应流程示意图,外部服务单元读取服务 请求req后,根据服务请求在队列末端添加服务应答res,此时队列长度变为4(偶数);当定 时到达时,前端向后端服务器发送查询,后端服务器查看缓存队列,此时队列长度为4(偶 数),读取队列末尾元素并返回服务响应结果;如果此时队列长度仍为3(奇数),则表示服务 尚未响应,返回定时指示;前端接收服务响应结果,并可进行下一次服务请求,如果返回的 是定时指示,则设定下一次定时等待服务响应结果。
进一步地,在本发明实施例中,如果Redis缓存队列到达生命周期过期时,则会删 除该Redis缓存队列。此时如果前端来查询服务响应结果,则无法查询到对应的Redis缓存 队列,则返回请求失败消息,并不再设定定时查询。
实施例4
本发明还提供了一种基于Redis的Web Service申请外部服务的系统,包括后端服 务器、Redis数据库和外部服务单元,其中:
所述后端服务器,用于接收前端发送的外部服务请求,并判断对应的Redis缓存队 列的长度是否对应请求添加时序,如果是则将所述外部服务请求添加到所述Redis缓存队 列结尾;
所述Redis数据库,用于建立并维护所述Redis缓存队列;
所述外部服务单元,用于判断所述Redis缓存队列的长度是否对应请求读取时序, 如果是则读取所述Redis缓存队列末尾的外部服务请求,并将该外部服务请求的服务响应 结果添加到所述Redis缓存队列末尾;
所述后端服务器,还用于在到达服务响应查询时间时判断所述Redis缓存队列的 长度是否对应响应读取时序,如果是则读取所述Redis缓存队列末尾的服务响应结果。
进一步地,当所述Redis缓存队列的长度为奇数时对应请求添加时序,当所述 Redis缓存队列的长度为偶数时对应请求读取时序,当所述Redis缓存队列的长度为奇数时 对应响应读取时序;或者,
当所述Redis缓存队列的长度为偶数时对应请求添加时序,当所述Redis缓存队列 的长度为奇数时对应请求读取时序,当所述Redis缓存队列的长度为偶数时对应响应读取 时序。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以 限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含 在本发明的保护范围之内。
本文发布于:2023-04-13 03:54:45,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/1/86247.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |