客户端调用服务的路由方法及系统的制作方法

文档序号:7761847阅读:333来源:国知局
专利名称:客户端调用服务的路由方法及系统的制作方法
技术领域
本发明涉及消息路由及服务调用技术领域,特别涉及一种客户端调用服务的路由 方法及系统。
背景技术
以消息队列为核心的服务端处理和客户端调用模式中,可能会遇到不同业务类型 的消息混杂在一起使用一个共同的服务队列的情况,但是不同业务类型的消息处理的速度 又不尽相同,处理较慢的消息就会堵塞处理较快的消息,这样会使消息处理相互影响。因 此,需要一种机制去分开这样的消息处理,让不同类型的消息使用不同的队列进行接收。现有方案部署多个服务队列,让客户端自行根据不同的需要写入相应队列。这种 方案通过部署更多的服务对消息队列进行归类处理,减少了不同类型消息间的性能影响, 提高队列的可用性。缺陷客户端各自管理自己对队列的写入,这样容易导致误操作,当客户端很多 时,每当服务地址修改,都会使得大量客户端代码或配置的改动,不利于多个客户端对部署 在不同的服务节点的相同程序的调用。

发明内容
(一)要解决的技术问题本发明要解决的技术问题是如何实现多个客户端对部署在不同的服务节点的相 同程序的调用,以更有效地利用服务器资源。( 二 )技术方案为解决上述技术问题,本发明提供了一种客户端调用服务的路由方法,包括以下 步骤Sl 客户端读取本地配置文件并将所述配置文件写入到本地缓存;S2 客户端获取本地配置文件中指定的要调用的服务及该服务所属的分组;S3:客户端计算分组内的服务列表及其中各服务的权重,结合调用次数算出本次 调用应该发送的服务地址;S4 客户端依据算出来的服务地址进行服务调用。其中,所述步骤Sl和步骤S2之间还包括检查本地配置文件是否更新的步骤,具体 包括Si. 1 从本地配置文件中读取远程配置文件更新地址URL及预设的本地配置文件 的更新周期;Si. 2 计算本次调用与上次调用的时间差是否大于所述更新周期,若大于,则执行 步骤Si. 3,否则,停止更新;Si. 3 启动异步线程下载所述更新地址URL中指定的远程配置文件;Si. 4 比较远程配置文件的版本号与本地配置版本号是否一致,如果不一致,则更新本地配置文件。其中,所述步骤Sl和Si. 1之间还包括步骤对缓存中的本地配置文件添加缓存依赖。其中,所述步骤S2获取服务及该服务所属的分组的具体方式为先从配置文件中 获取服务调用的配置标识,再从该标识中获取消息来源参数和该服务所属的分组,所述消 息来源参数包括客户端标识、服务标识和服务的版本ID。其中,所述步骤S3中计算服务地址的方式为调用服务的分组的次数与服务列表 总数取模。一种客户端调用服务的路由系统,包括配置文件读取模块,用于客户端读取本地配置文件并将所述配置文件写入到本地 缓存;服务获取模块,用于客户端获取本地配置文件中指定的要调用的服务及该服务所 属的分组;服务地址计算模块,用于客户端计算分组内的服务列表及其中各服务的权重,结 合调用次数算出本次调用应该发送的服务地址;服务调用模块,用于客户端依据算出来的服务地址进行服务调用。其中,还包括本地配置文件更新模块,具体包括更新参数获取模块,用于从本地配置文件中读取远程配置文件更新地址URL及预 设的本地配置文件的更新周期;时间差计算模块,用于计算本次调用与上次调用的时间差是否大于所述更新周 期,若大于,则执行更新文件下载模块,否则,停止更新;更新文件下载模块,用于启动异步线程下载所述更新地址URL中指定的远程配置 文件;更新模块,用于比较远程配置文件的版本号与本地配置版本号是否一致,如果不 一致,则更新本地配置文件。其中,还包括缓存依赖添加模块,用于对缓存中的本地配置文件添加缓存依赖。(三)有益效果本发明通过客户端从配置文件中读取要调用的服务及服务分组,并计算要调用的 服务地址,根据该地址调用服务,实现了多个客户端对部署在不同的服务节点的相同程序 的调用,提高服务端的可用性和处理性能,更有效地利用了服务器资源;并及时更新配置文 件,保证客户端正确地调用服务。


图1是本发明实施例的一种客户端调用服务的路由方法流程图;图2是本发明实施例的一种客户端调用服务的路由方法中更新配置文件流程图;图3是应用本发明的客户端调用服务的路由方法的异步调用框架示意图;图4是本发明实施例的一种客户端调用服务的路由系统结构示意图。
具体实施例方式下面结合附图和实施例,对本发明的具体实施方式
作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。本发明通过一个分组调用配置文件,并且配置处理能够在某个时刻请求一个远程 配置文件,下载新版本的配置文件以替换本地配置文件,统一管理客户端对不同队列服务 的调用,从而可以集中管理消息的流向。如图1所示,为本发明实施例的一种客户端调用服务的路由方法流程图,包括步骤S101,客户端读取本地配置文件并将所述配置文件写入到本地缓存。步骤S102,客户端获取配置文件中指定的要调用的服务及该服务所属的分组。其 中,获取服务及该服务所属的分组的具体方式为先从配置文件中获取服务调用的配置标 识,再从该标识中获取消息来源参数和该服务所属的分组,所述消息来源参数包括客户端 标识、服务标识和服务的版本ID。如下表所示表1配置文件中描述服务的参数
<sources>
〈source name="ClientTest-Default-l .0" usingGroup="onlinel_msmq"></source> 〈source name="ClientTest-ServiceTest-1.0" usingGroup="onlinel_msmq"x/source> 〈source name=" Space-Space.FriendCallService-1.0" usingGroup="online 1 _msmq"></source> </sources>服务调用的配置标识为sourcename = " ClientTest-Default-l· 0〃 usingGrou p=〃 online l.msmq"。其中source name表示消息来源参数,ClientTest为客户端标识, Default为服务标识,1. 0为服务的版本ID,usingGroup = “ onlinel.msmq"表示该服务 Default所属的分组为onlinel_msmq。由该部分配置文件可看出,通过修改Source Name 与分组间的对应关系,可以在不修改分组的情况下,随意修改或添加新的Source Name,也 可以修改using Group参数来使客户端调用不同的服务分组。步骤S103,客户端计算分组内的服务列表及其中各服务的权重,结合调用次数算 出本次调用应该发送的服务地址。如下表所示,为配置文件中服务分组的参数。表2配置文件中描述服务的参数
I-1-J
<groups>
〈group name="onlinel_msniqn sendTimeout='O0:00:03,000" implType="DMedia.Fetion.InvokeService.Contract.ServiceInvokerMsmqClient, DMedia.Fetion.InvokeService.Contract">
〈address priority="l">net.msmq://web-singtel-01/private/ServiceInvokerProvider</address> 〈address priority=" 1 '>net.msmq://web-singtel-02/private/ServiceInvokerProvider</address> 〈address priority=" 1 ">net.msmq://WEB-CHAT-01/private/ServiceInvokerProvider</address> <address priority=" 1 '>net.msmq://WEB-CHAT-02/private/ServiceInvokerProvider</address> </group> </groups>参数group name表示服务分组的名称。此名称会被Source所引用;参数address表示服务调用的服务地址;参数address priority表示该服务在服务地址列表中的权重, 权重越大的地址被添加到新的计算列表中的次数越多,这样就越有可能被使用,上表中示 出了 onlinel_msmq分组中的4个服务地址,其权重都是1。该步骤中采用调用的服务次数与服务列表总数取模来计算服务地址。具体步骤 为统计调用服务的分组的次数,即某个分组中的某个服务被调用一次,则该分组的 次数被累加一次,每次调用时统计当前被累加调用的次数N。在内存中生成一个中间过程列表,生成方式为将分组中的每个地址按权重依次放 入中间过程列表,权重的数值就是放入中间过程列表的次数,所有的地址放完后,中间过程 列表中的地址数为M。调用的次数N与中间过程列表地址总数M取模,得到中间过程列表的索引值,即 index = N% M,中间过程列表中对应index的那一项则为本次调用的服务地址(中间过程 列表的行数从0计数,即0 M-I行)。由上可看出,权重越大的服务地址,被选中的概率就 越大。步骤S104,客户端依据算出来的服务地址进行服务调用。由于服务器地址等参数可能会改变,因此,在步骤S 101和S102之间还包括检查 配置文件是否更新的步骤,如图2所示,具体包括步骤S201,从配置文件中读取远程配置文件更新地址URL及预设的该配置文件的 更新周期。如下表所示表3配置文件中的更新参数
「‘
〈updating frequency="300M usingUrl="online" timeout="00:00:03"> <url name="localhostn>DMedia.Fetion.InvokeService.Contract.invoker_groups.xml</url> <url name="functest">http://filel.fimg.com/xml/invokeservice/invoker_groups.xml</url> <url name=nonline">http://l92.168.252.199/xml/invokeservice/invoker_giOups.xml</url> <url name="preonline">DMedia.Fetion.InvokeService.Contract.invoker_groups.xml</url> 〈/updating〉配置文件中更新参数包括参数frequency更新周期(秒),表示每隔多长时间进 行一次更新捡查;参数usingUrl使用url列中的哪一个远程地址下载最新的配置文件;参 数timeout表示下载配置文件的超时时间;参数url表示远程配置文件的下载地址。步骤S202 计算本次调用与上次调用的时间差是否大于所述更新周期,若大于, 则执行步骤S204,否则,执行步骤S203,步骤S203,停止更新。步骤S204,启动异步线程下载所述更新地址URL中指定的远程配置文件,具体地, 启动异步线程从usingUrl参数中指定的URL地址下载远程配置文件。若下载文件超时,即 超过timeout设定的时间,则停止本次更新,下一次更新时会再次触发不成功的更新。步骤S205,远程配置文件下载完成后,比较远程配置文件的版本号与本地配置版 本号是否一致,如果一致,表明版本没有更新,则执行步骤S206,否则执行步骤S207。配置 文件中包含版本号及该版本更新日期。步骤S206,不更新本地配置文件。
步骤S207,更新本地配置文件。为了使更新本地配置文件后,缓存中的配置文件自动失效,并关联更新的配置文 件,客户端读取本地配置文件并把配置文件写入本地缓存后,添加对该配置文件的缓存依 赖。图3为一个通过消息队列提供异步调用的框架,其中客户端调用则应用了本文 所述的路由方法。在这个框架中多个客户端需要调用多个程序相同、部署不同的队列服 务,客户端的对服务的调用都通过分组配置文件进行管理,控制消息的路由走向,即图3中 左边部分,客户端1、客户端2和分组及其之间的交互关系,客户端1和客户端2分别通 过各自的消息来源参数source和消息标识identity来调用服务,具体通过source中的 serviceName在分组中获取要调用服务的地址address。通过更新远程配置文件,会自动下 载到各客户端的本地配置中,从而当服务端出现性能问题时能及时分流,提高服务的可靠 性和利用率,并且也可以有效的分配消息到相应的服务器中进行处理,防止不同消息间因 处理性能问题产品相互的影响。本发明还提供了一种客户端调用服务的路由系统,如图4所示,包括配置文件读 取模块,用于客户端读取本地配置文件并将所述配置文件写入到本地缓存;服务获取模块, 用于客户端获取配置文件中指定的要调用的服务及该服务所属的分组;服务地址计算模 块,用于客户端计算分组内的服务列表及其中各服务的权重,结合调用次数算出本次调用 应该发送的服务地址;服务调用模块,用于客户端依据算出来的服务地址进行服务调用。为使配置文件得到更新,本系统还包括配置文件更新模块,具体包括更新参数 获取模块,用于从配置文件中读取远程配置文件更新地址URL及预设的该配置文件的更新 周期;时间差计算模块,用于计算本次调用与上次调用的时间差是否大于所述更新周期,若 大于,则执行更新文件下载模块,否则,停止更新;更新文件下载模块,用于启动异步线程下 载所述更新地址URL中指定的远程配置文件;更新模块,用于比较远程配置文件的版本号与本地配置版本号是否一致,如果是 更新的版本号则更新本地配置文件。为使更新后能及时关联更新的配置文件,本系统还包括缓存依赖添加模块,用于 对缓存中配置文件添加缓存依赖。以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通 技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有 等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
权利要求
一种客户端调用服务的路由方法,其特征在于,包括以下步骤S1客户端读取本地配置文件并将所述配置文件写入到本地缓存;S2客户端获取本地配置文件中指定的要调用的服务及该服务所属的分组;S3客户端计算分组内的服务列表及其中各服务的权重,结合调用次数算出本次调用应该发送的服务地址;S4客户端依据算出来的服务地址进行服务调用。
2.如权利要求1所述的客户端调用服务的路由方法,其特征在于,所述步骤Sl和步骤 S2之间还包括检查本地配置文件是否更新的步骤,具体包括Si. 1 从本地配置文件中读取远程配置文件更新地址URL及预设的本地配置文件的更 新周期;Si. 2 计算本次调用与上次调用的时间差是否大于所述更新周期,若大于,则执行步骤 Si. 3,否则,停止更新;Si. 3 启动异步线程下载所述更新地址URL中指定的远程配置文件; Si. 4 比较远程配置文件的版本号与本地配置版本号是否一致,如果不一致,则更新本 地配置文件。
3.如权利要求2所述的客户端调用服务的路由方法,其特征在于,所述步骤Sl和Si.1 之间还包括步骤对缓存中的本地配置文件添加缓存依赖。
4.如权利要求1所述的客户端调用服务的路由方法,其特征在于,所述步骤S2获取服 务及该服务所属的分组的具体方式为先从配置文件中获取服务调用的配置标识,再从该 标识中获取消息来源参数和该服务所属的分组,所述消息来源参数包括客户端标识、服务 标识和服务的版本ID。
5.如权利要求1所述的客户端调用服务的路由方法,其特征在于,所述步骤S3中计算 服务地址的方式为调用服务的分组的次数与服务列表总数取模。
6.一种客户端调用服务的路由系统,其特征在于,包括配置文件读取模块,用于客户端读取本地配置文件并将所述配置文件写入到本地缓存;服务获取模块,用于客户端获取本地配置文件中指定的要调用的服务及该服务所属的 分组;服务地址计算模块,用于客户端计算分组内的服务列表及其中各服务的权重,结合调 用次数算出本次调用应该发送的服务地址;服务调用模块,用于客户端依据算出来的服务地址进行服务调用。
7.如权利要求6所述的客户端调用服务的路由系统,其特征在于,还包括本地配置文 件更新模块,具体包括更新参数获取模块,用于从本地配置文件中读取远程配置文件更新地址URL及预设的 本地配置文件的更新周期;时间差计算模块,用于计算本次调用与上次调用的时间差是否大于所述更新周期,若 大于,则执行更新文件下载模块,否则,停止更新;更新文件下载模块,用于启动异步线程下载所述更新地址URL中指定的远程配置文件;更新模块,用于比较远程配置文件的版本号与本地配置版本号是否一致,如果不一致, 则更新本地配置文件。
8.如权利要求7所述的客户端调用服务的路由系统,其特征在于,还包括缓存依赖添 加模块,用于对缓存中的本地配置文件添加缓存依赖。
全文摘要
本发明公开了一种客户端调用服务的路由方法,包括客户端读取本地配置文件并将所述配置文件写入到本地缓存;客户端获取配置文件中指定的要调用的服务及该服务所属的分组;客户端计算分组内的服务列表及其中各服务的权重,结合调用次数算出本次调用应该发送的服务地址;客户端依据算出来的服务地址进行服务调用。还公开了一种客户端调用服务的路由系统,包括配置文件读取模块、服务获取模块、服务地址计算模块、服务调用模块、配置文件更新模块和缓存依赖添加模块。本发明实现了多个客户端对部署在不同的服务节点的相同程序的调用,效地利用了服务器资源。
文档编号H04L12/56GK101969399SQ20101050390
公开日2011年2月9日 申请日期2010年9月30日 优先权日2010年9月30日
发明者陈俊彪 申请人:北京神州泰岳软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1