基于http请求的串行化处理结果返回系统及方法
文献发布时间:2024-04-18 20:00:50
技术领域
本发明涉及数据处理技术领域,尤其涉及一种基于http请求的串行化处理结果返回系统及方法。
背景技术
随着计算机行业的发展,现如今非常多的系统都是基于http协议的B/S(Browser/Server)模式开发的,客户端基于Web浏览器(chrome、IE、Firef ox等),服务端基于各种后端语言开发的Web服务,通过http协议接口进行交互,http协议是一种与编程语言以及平台无关的应用层网络协议,使用简单。
几乎所有的Web服务器都支持并发的http请求,即多个客户端请求可以并行的到达Web服务端并并行的处理客户端请求,在绝大多数的场景中这本身是没有问题,并且还能极大的提高系统性能以及用户体验,但是在有些场景下,比如在一些交易系统、抢购系统中,需要严格保证资金、库存等的正确性,这些并行到达Web服务端的http请求,在这些场景下希望Web服务端能够串行的去处理这些请求并返回结果。
现有技术中一般采用的是程序中加锁的方式来避免同一时间只能处理一个请求,但加锁往往会导致一些性能问题,同时锁使用不当还会造成死锁或数据异常问题,且无法很好的将Web服务器端跟业务处理服务端分离;此外消息队列的方式,同时Web服务器端跟业务处理服务端分离,但Web服务端将请求封装发送给消息队列后即返回初始结果(即提交了任务,但还没有业务处理结果),业务处理服务端消费了消息处理完成后,再将结果写入数据库或者回调Web服务器端,但由于http协议的局限性(无状态且单向),此时Web服务端无法再将结果通知到客户端,必须客户端主动刷新才能获取到最新的处理结果,导致体验也不好。因此,如何实时返回响应结果给客户端成为一个亟待解决的问题。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供了一种基于http请求的串行化处理结果返回系统及方法,旨在解决如何实时返回响应结果给客户端的问题。
为实现上述目的,本发明提供了一种基于http请求的串行化处理结果返回系统,所述基于http请求的串行化处理结果返回系统包括客户端、Web服务端、RabbitMQ及业务处理服务端;
所述客户端,用于将用户发起的http请求发送至所述Web服务端;
所述Web服务端,用于在接收到所述http请求时,基于所述RabbitMQ创建目标队列,将所述http请求的业务请求信息进行封装,获得预设格式请求数据,并将所述预设格式请求数据发送至业务处理消息队列中,以使所述业务处理服务端串行处理所述业务处理消息队列中的所述预设格式请求数据;
所述业务处理服务端,用于将处理后的预设格式请求数据发送至所述目标队列,以使所述Web服务端对所述处理后的预设格式请求数据中字符串校验码进行校验;
所述Web服务端,还用于在校验通过后,将所述处理后的预设格式请求数据进行封装,并将封装后的http请求的串行化处理结果返回至所述客户端。
可选地,所述业务处理服务端,还用于根据所述预设格式请求数据确定对应的业务信息,根据所述业务信息对所述预设格式请求数据进行业务逻辑串行处理。
可选地,所述业务处理服务端,还用于从处理后的预设格式请求数据中提取目标队列名,根据所述目标队列名将所述处理后的预设格式请求数据发送至所述目标队列。
可选地,所述Web服务端,还用于根据预设格式请求数据确定第一字符串校验码,从所述处理后的预设格式请求数据提取对应的字符串校验码,并将所述处理后的预设格式请求数据对应的字符串校验码作为第二字符串校验码;
所述Web服务端,还用于将所述第一字符串校验码与所述第二字符串校验码进行校验。
可选地,所述Web服务端,还用于在所述第一字符串校验码与所述第二字符串校验码一致时,判定校验通过。
此外,为实现上述目的,本发明还提出一种基于http请求的串行化处理结果返回系统,所述基于http请求的串行化处理结果返回方法包括以下步骤:
客户端将用户发起的http请求发送至Web服务端;
所述Web服务端在接收到所述http请求时,基于RabbitMQ创建目标队列,将所述http请求的业务请求信息进行封装,获得预设格式请求数据,并将所述预设格式请求数据发送至业务处理消息队列中,以使业务处理服务端串行处理所述业务处理消息队列中的所述预设格式请求数据;
所述业务处理服务端将处理后的预设格式请求数据发送至所述目标队列,以使所述Web服务端对所述处理后的预设格式请求数据中字符串校验码进行校验;
所述Web服务端在校验通过后,将所述处理后的预设格式请求数据进行封装,并将封装后的http请求的串行化处理结果返回至所述客户端。
可选地,所述业务处理服务端串行处理所述业务处理消息队列中的所述预设格式请求数据的步骤,包括:
业务处理服务端根据所述预设格式请求数据确定对应的业务信息,根据所述业务信息对所述预设格式请求数据进行业务逻辑串行处理。
可选地,所述业务处理服务端将处理后的预设格式请求数据发送至所述目标队列的步骤,包括:
所述业务处理服务端从处理后的预设格式请求数据中提取目标队列名,根据所述目标队列名将所述处理后的预设格式请求数据发送至所述目标队列。
可选地,所述Web服务端对所述处理后的预设格式请求数据中字符串校验码进行校验的步骤,包括:
所述Web服务端根据预设格式请求数据确定第一字符串校验码,从所述处理后的预设格式请求数据提取对应的字符串校验码,并将所述处理后的预设格式请求数据对应的字符串校验码作为第二字符串校验码;
所述Web服务端将所述第一字符串校验码与所述第二字符串校验码进行校验。
可选地,所述Web服务端在校验通过后,将所述处理后的预设格式请求数据进行封装的步骤之前,还包括:
所述Web服务端在所述第一字符串校验码与所述第二字符串校验码一致时,判定校验通过。
此外,为实现上述目的,本发明还提出一种基于http请求的串行化处理结果返回设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于http请求的串行化处理结果返回程序,所述基于h ttp请求的串行化处理结果返回程序配置为实现如上文所述的基于http请求的串行化处理结果返回系统的步骤。
此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有基于http请求的串行化处理结果返回程序,所述基于http请求的串行化处理结果返回程序被处理器执行时实现如上文所述的基于http请求的串行化处理结果返回系统的步骤。
本发明基于http请求的串行化处理结果返回系统包括客户端、Web服务端、RabbitMQ及业务处理服务端,首先客户端将用户发起的http请求发送至Web服务端,然后Web服务端在接收到http请求时,基于RabbitMQ创建目标队列,将http请求的业务请求信息进行封装,获得预设格式请求数据,并将预设格式请求数据发送至业务处理消息队列中,以使业务处理服务端串行处理业务处理消息队列中的预设格式请求数据,之后业务处理服务端将处理后的预设格式请求数据发送至目标队列,以使Web服务端对处理后的预设格式请求数据中字符串校验码进行校验,最后Web服务端在校验通过后,将处理后的预设格式请求数据进行封装,并将封装后的http请求的串行化处理结果返回至所述客户端。本发明中使用了业务处理消息队列将并发http串行化处理,同时使用随机队列的机制,实时将处理结果返回给客户端,兼顾了效率与用户体验。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的基于http请求的串行化处理结果返回设备的结构示意图;
图2为本发明基于http请求的串行化处理结果返回系统第一实施例的结构框图;
图3为本发明基于http请求的串行化处理结果返回方法第一实施例的流程示意图;
图4为本发明基于http请求的串行化处理结果返回方法第一实施例的数据交互流程图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的基于http请求的串行化处理结果返回设备结构示意图。
如图1所示,该基于http请求的串行化处理结果返回设备可以包括:处理器1001,例如中央处理器(Central Processing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入模块比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(Wireless-Fidelity,Wi-Fi)接口)。存储器1005可以是高速的随机存取存储器(Random Access Memory,RAM),也可以是稳定的非易失性存储器(Non-VolatileMemory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储系统。
本领域技术人员可以理解,图1中示出的结构并不构成对基于http请求的串行化处理结果返回设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及基于http请求的串行化处理结果返回程序。
在图1所示的基于http请求的串行化处理结果返回设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明基于http请求的串行化处理结果返回设备中的处理器1001、存储器1005可以设置在基于http请求的串行化处理结果返回设备中,所述基于http请求的串行化处理结果返回设备通过处理器1001调用存储器1005中存储的基于http请求的串行化处理结果返回程序,并执行本发明实施例提供的基于http请求的串行化处理结果返回系统。
本发明实施例提供了一种基于http请求的串行化处理结果返回系统,参照图2,图2为本发明基于http请求的串行化处理结果返回系统第一实施例的结构框图。
本实施例中,所述基于http请求的串行化处理结果返回系统包括客户端2001、Web服务端2002、RabbitMQ2003及业务处理服务端2004。
在本实施例中,客户端为发起http请求的用户端,比如浏览器端、App端等,一般由用户发起,多个用户可并发发起请求;Web服务器端用于接收客户端发起的Http请求并响应;业务处理服务端实际处理业务逻辑的服务端,有些场景中Web服务器端也包含业务处理逻辑,本实施例中Web服务器端与业务处理服务端分离,通过RabbitMQ进行消息交互。
所述客户端2001,用于将用户发起的http请求发送至所述Web服务端2002。
需要说明的是,用户发起的http请求可以为浏览器端、App端等发起的多个http请求。
所述Web服务端2002,用于在接收到所述http请求时,基于所述Rabbit MQ2003创建目标队列,将所述http请求的业务请求信息进行封装,获得预设格式请求数据,并将所述预设格式请求数据发送至业务处理消息队列中,以使所述业务处理服务端2004串行处理所述业务处理消息队列中的所述预设格式请求数据。
在具体实现中,Web服务端接收到客户端的http请求之后,在RabbitMQ中创建随机队列(即目标队列),并得到RabbitMQ返回的随机队列名(即目标队列名)。
还应该理解的是,随机队列名即RabbitMQ对应的ReplyTo附属信息字段的值,用来告诉业务处理服务端处理完成之后将发送结果哪个队列。
需要说明的是,Web服务端将请求的消息内容(即http请求的业务请求信息)封装为指定的Json格式,其中封装之后的消息(即预设格式请求数据)中会额外生成2个附属信息(ReplyTo及CorrelationId)。
CorrelationId为随机生成的32位字符串校验码,主要起校验作用,Web服务端生成的消息中携带CorrelationId,后续业务处理服务端消费到该消息并经业务处理服务端处理完后需在处理结果消息中也携带该CorrelationId,这样Web服务端消费到请求的处理结果后就能通过CorrelationId的值来确认请求跟结果是匹配的,其目的是为了防止不同的请求消息进入到同一个随机队列中。
还需要说明的是,Web服务端将封装之后的预设格式请求数据发送至Ra bbitMQ的指定队列,业务处理消息队列为RabbitMQ的指定队列即长期固定队列,随后Web服务端开始消费该随机队列(循环等待)。
进一步地,业务处理服务端,还用于根据预设格式请求数据确定对应的业务信息,根据所述业务信息对预设格式请求数据进行业务逻辑串行处理。
在本实施例中,业务处理服务端持续串行消费业务处理队列中的消息,消费到业务处理队列中的消息后,根据消息内容进行具体的业务逻辑处理(例如某个秒杀系统,用户抢购请求来了后,对应的业务逻辑一般为先判断库存够不够,用户是不是有购买资格,都满足后进行扣费、减库存等,最后将购买结果信息返回给用户)。
所述业务处理服务端2004,用于将处理后的预设格式请求数据发送至所述目标队列,以使所述Web服务端2002对所述处理后的预设格式请求数据中字符串校验码进行校验。
进一步地,业务处理服务端,还用于从处理后的预设格式请求数据中提取目标队列名,根据目标队列名将处理后的预设格式请求数据发送至目标队列。
在具体实现中,业务处理服务端处理完成后,封装结果为指定的Json格式,并将业务处理服务端中消费到的消息中携带的CorrelationId字段再次附加到结果消息(即处理后的预设格式请求数据)中,然后根据处理后的预设格式请求数据携带的ReplyTo字段值,将结果发送到名为ReplyTo值的队列中。
进一步地,Web服务端,还用于根据预设格式请求数据确定第一字符串校验码,从处理后的预设格式请求数据提取对应的字符串校验码,并将处理后的预设格式请求数据对应的字符串校验码作为第二字符串校验码;将第一字符串校验码与第二字符串校验码进行校验。
在本实施例中,为了防止异常消息进入到随机队列中造成数据错乱,We b服务端消费到业务处理服务端发送到随机队列中的消息后,获取消息,同时根据消息体中的CorrelationId字段值进行二次校验是否跟预设格式请求数据中携带的CorrelationId字段一致。
所述Web服务端2002,还用于在校验通过后,将所述处理后的预设格式请求数据进行封装,并将封装后的http请求的串行化处理结果返回至所述客户端2001。
进一步地,Web服务端,还用于在第一字符串校验码与第二字符串校验码一致时,判定校验通过。
在具体实现中,校验通过后,Web服务端将处理后的预设格式请求数据进行封装后返回给客户端,至此,客户端发起的这次Http请求涉及的流程处理完毕,客户端实时获取到处理结果。
在本实施例中,首先客户端将用户发起的http请求发送至Web服务端,然后Web服务端在接收到http请求时,基于RabbitMQ创建目标队列,将htt p请求的业务请求信息进行封装,获得预设格式请求数据,并将预设格式请求数据发送至业务处理消息队列中,以使业务处理服务端串行处理业务处理消息队列中的预设格式请求数据,之后业务处理服务端将处理后的预设格式请求数据发送至目标队列,以使Web服务端对处理后的预设格式请求数据中字符串校验码进行校验,最后Web服务端在校验通过后,将处理后的预设格式请求数据进行封装,并将封装后的http请求的串行化处理结果返回至所述客户端。本实施例中使用了业务处理消息队列将并发http串行化处理,同时使用随机队列的机制,实时将处理结果返回给客户端,兼顾了效率与用户体验。
参照图3,图3为本发明基于http请求的串行化处理结果返回方法第一实施例的流程示意图。
如图3所示,本发明实施例提出的基于http请求的串行化处理结果返回方法包括以下步骤:
步骤S10:客户端将用户发起的http请求发送至Web服务端。
参考图4,图4为本发明基于http请求的串行化处理结果返回方法第一实施例的数据交互流程图,客户端为发起http请求的用户端,比如浏览器端、A pp端等,一般由用户发起,多个用户可并发发起请求;Web服务器端用于接收客户端发起的Http请求并响应;业务处理服务端实际处理业务逻辑的服务端,有些场景中Web服务器端也包含业务处理逻辑,本实施例中Web服务器端与业务处理服务端分离,通过RabbitMQ进行消息交互。
需要说明的是,用户发起的http请求可以为浏览器端、App端等发起的多个http请求。
步骤S20:所述Web服务端在接收到所述http请求时,基于RabbitMQ创建目标队列,将所述http请求的业务请求信息进行封装,获得预设格式请求数据,并将所述预设格式请求数据发送至业务处理消息队列中,以使业务处理服务端串行处理所述业务处理消息队列中的所述预设格式请求数据。
在具体实现中,Web服务端接收到客户端的http请求之后,在RabbitMQ中创建随机队列(即目标队列),并得到RabbitMQ返回的随机队列名(即目标队列名)。
还应该理解的是,随机队列名即RabbitMQ对应的ReplyTo附属信息字段的值,用来告诉业务处理服务端处理完成之后将发送结果哪个队列。
需要说明的是,Web服务端将请求的消息内容(即http请求的业务请求信息)封装为指定的Json格式,其中封装之后的消息(即预设格式请求数据)中会额外生成2个附属信息(ReplyTo及CorrelationId)。
CorrelationId为随机生成的32位字符串校验码,主要起校验作用,Web服务端生成的消息中携带CorrelationId,后续业务处理服务端消费到该消息并经业务处理服务端处理完后需在处理结果消息中也携带该CorrelationId,这样Web服务端消费到请求的处理结果后就能通过CorrelationId的值来确认请求跟结果是匹配的,其目的是为了防止不同的请求消息进入到同一个随机队列中。
还需要说明的是,Web服务端将封装之后的预设格式请求数据发送至Ra bbitMQ的指定队列,业务处理消息队列为RabbitMQ的指定队列即长期固定队列,随后Web服务端开始消费该随机队列(循环等待)。
进一步地,业务处理服务端,还用于根据预设格式请求数据确定对应的业务信息,根据所述业务信息对预设格式请求数据进行业务逻辑串行处理。
在本实施例中,业务处理服务端持续串行消费业务处理队列中的消息,消费到业务处理队列中的消息后,根据消息内容进行具体的业务逻辑处理(例如某个秒杀系统,用户抢购请求来了后,对应的业务逻辑一般为先判断库存够不够,用户是不是有购买资格,都满足后进行扣费、减库存等,最后将购买结果信息返回给用户)。
步骤S30:所述业务处理服务端将处理后的预设格式请求数据发送至所述目标队列,以使所述Web服务端对所述处理后的预设格式请求数据中字符串校验码进行校验。
进一步地,业务处理服务端,还用于从处理后的预设格式请求数据中提取目标队列名,根据目标队列名将处理后的预设格式请求数据发送至目标队列。
在具体实现中,业务处理服务端处理完成后,封装结果为指定的Json格式,并将业务处理服务端中消费到的消息中携带的CorrelationId字段再次附加到结果消息(即处理后的预设格式请求数据)中,然后根据处理后的预设格式请求数据携带的ReplyTo字段值,将结果发送到名为ReplyTo值的队列中。
进一步地,Web服务端,还用于根据预设格式请求数据确定第一字符串校验码,从处理后的预设格式请求数据提取对应的字符串校验码,并将处理后的预设格式请求数据对应的字符串校验码作为第二字符串校验码;将第一字符串校验码与第二字符串校验码进行校验。
在本实施例中,为了防止异常消息进入到随机队列中造成数据错乱,We b服务端消费到业务处理服务端发送到随机队列中的消息后,获取消息,同时根据消息体中的CorrelationId字段值进行二次校验是否跟预设格式请求数据中携带的CorrelationId字段一致。
步骤S40:所述Web服务端在校验通过后,将所述处理后的预设格式请求数据进行封装,并将封装后的http请求的串行化处理结果返回至所述客户端。
进一步地,Web服务端,还用于在第一字符串校验码与第二字符串校验码一致时,判定校验通过。
在具体实现中,校验通过后,Web服务端将处理后的预设格式请求数据进行封装后返回给客户端,至此,客户端发起的这次Http请求涉及的流程处理完毕,客户端实时获取到处理结果。
在本实施例中,首先客户端将用户发起的http请求发送至Web服务端,然后Web服务端在接收到http请求时,基于RabbitMQ创建目标队列,将htt p请求的业务请求信息进行封装,获得预设格式请求数据,并将预设格式请求数据发送至业务处理消息队列中,以使业务处理服务端串行处理业务处理消息队列中的预设格式请求数据,之后业务处理服务端将处理后的预设格式请求数据发送至目标队列,以使Web服务端对处理后的预设格式请求数据中字符串校验码进行校验,最后Web服务端在校验通过后,将处理后的预设格式请求数据进行封装,并将封装后的http请求的串行化处理结果返回至所述客户端。本实施例中使用了业务处理消息队列将并发http串行化处理,同时使用随机队列的机制,实时将处理结果返回给客户端,兼顾了效率与用户体验。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
- 一种卵石-泥岩复合地层穿越桩群盾构掘进的施工方法
- 富水砂卵石泥岩交互复合地层盾构施工同步注浆预测方法