CN113259431B - 服务调用方法、服务调用装置、电子设备以及存储介质 - Google Patents
服务调用方法、服务调用装置、电子设备以及存储介质 Download PDFInfo
- Publication number
- CN113259431B CN113259431B CN202110514286.5A CN202110514286A CN113259431B CN 113259431 B CN113259431 B CN 113259431B CN 202110514286 A CN202110514286 A CN 202110514286A CN 113259431 B CN113259431 B CN 113259431B
- Authority
- CN
- China
- Prior art keywords
- service
- address
- party
- list
- addresses
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Abstract
本公开提供了一种应用于消费方的服务调用方法,涉及金融领域或其他领域。所述服务调用方法包括:从预先设置的配置文件中获取M个服务方的地址,其中,每个所述服务方用于为所述消费方提供至少一个服务,M为大于或等于1的整数;将所述M个服务方的地址存储到缓存中的第一服务列表,其中,所述缓存包括本地缓存或分布式缓存的至少一种;响应用户的操作请求,从所述第一服务列表中获取所述M个服务方的地址中的第一服务方的地址;以及基于所述第一服务方的地址来进行服务调用。本公开还提供了一种服务调用装置、电子设备以及存储介质。
Description
技术领域
本公开涉及金融领域或其他领域,更具体地,涉及一种服务调用方法、服务调用装置、电子设备以及存储介质。
背景技术
为了保证服务的高可用性,实现多点多活的功能,一个服务往往部署在多个服务方上,以使消费方可以从服务列表中选择一个服务方进行调用。若在业务系统设计之初并没有考虑多点多活,而是采用单点服务方式进行设计部署,但是随着业务的增长,单点服务方式不能满足业务需求,因此可能需要进行多点多活的改造。相关技术中,一般采用分布式服务治理框架或者使用nginx服务器来做负载均衡等方式将单点服务架构改造成多点多活架构。
在实现本公开构思的过程中,发明人发现相关技术中至少存在如下问题:
若引入分布式服务治理框架或nginx服务器对单点服务架构进行改造,一般会对服务方或消费方进行接口的重新适配,或者会增加额外的服务器等硬件设施,导致具有较高的改造成本。
发明内容
有鉴于此,本公开实施例提供了一种无需引入分布式服务治理框架或nginx服务器等额外组件,即能够将单点服务架构改造为多点多活的服务架构的服务调用方法、服务调用装置、电子设备以及存储介质。
本公开实施例的一个方面提供了一种应用于消费方的服务调用方法。所述服务调用方法包括:从预先设置的配置文件中获取M个服务方的地址,其中,每个所述服务方用于为所述消费方提供至少一个服务,M为大于或等于1的整数。将所述M个服务方的地址存储到缓存中的第一服务列表,其中,所述缓存包括本地缓存或分布式缓存的至少一种。响应用户的操作请求,从所述第一服务列表中获取所述M个服务方的地址中的第一服务方的地址。以及基于所述第一服务方的地址来进行服务调用。
根据本公开的实施例,所述基于所述第一服务方的地址来进行服务调用包括:当服务调用失败时,停止从所述第一服务列表中获取所述第一服务方的地址来进行服务调用。
根据本公开的实施例,在所述停止从所述第一服务列表中获取所述第一服务方的地址来进行服务调用之后,所述方法还包括:将i的初始值赋为1,循环执行以下操作,直至服务调用成功或者执行M-1次:从所述第一服务列表中获取第i个服务方的地址。基于所述第i个服务方的地址来进行服务调用。当服务调用成功时,结束本次循环。当服务调用失败时,停止从所述第一服务列表中获取所述第i个服务方的地址来进行服务调用,并令i=i+1。
根据本公开的实施例,所述方法还包括:当基于所述M个服务方的地址中的一个服务方的地址进行服务调用失败时,对该服务方的地址执行以下操作:获取服务调用失败时间。基于第一预设时长和所述失败时间,确定重试时间戳。将该服务方的地址和所述重试时间戳相关联地存储到所述缓存中的第二服务列表。
根据本公开的实施例,所述第二服务列表包括所述M个服务方的地址中服务调用失败的N个服务方的地址,N为大于或等于1的整数,N小于或等于M,其中,所述方法还包括:每隔第二预设时长,将n的初始值赋为1,循环执行以下操作直至执行N次:从所述第二服务列表中获取第n个服务方的地址,以及与所述第n个服务方的地址对应的重试时间戳。将所述重试时间戳与当前时刻进行对比。在当前时刻小于所述重试时间戳时,令n=n+1。在当前时刻大于或等于所述重试时间戳时,将所述第n个服务方的地址及所述重试时间戳从所述第二服务列表中移除,并允许从所述第一服务列表中获取所述第n个服务方的地址来进行服务调用,然后令n=n+1。
根据本公开的实施例,所述停止从所述第一服务列表中获取所述第一服务方的地址来进行服务调用包括:从所述第一服务列表中移除所述第一服务方的地址。或在所述第一服务列表中设置与所述第一服务方的地址相关联的停止调用标识。
根据本公开的实施例,所述从所述第一服务列表中获取所述M个服务方的地址中的第一服务方的地址包括:从所述M个服务方的地址中随机抽取一个服务方的地址作为所述第一服务方的地址。
根据本公开的实施例,在从预先设置的配置文件中获取M个服务方的地址之前,所述方法还包括:接收用户手工配置所述M个服务方的地址的操作。响应所述操作设置所述配置文件。
本公开实施例的另一个方面提供了一种应用于消费方的服务调用装置。所述服务调用装置包括第一获取模块、地址存储模块、第二获取模块和服务调用模块。所述第一获取模块用于从预先设置的配置文件中获取M个服务方的地址,其中,每个所述服务方用于为所述消费方提供至少一个服务,M为大于或等于1的整数。所述地址存储模块用于将所述M个服务方的地址存储到缓存中的第一服务列表,其中,所述缓存包括本地缓存或分布式缓存的至少一种。所述第二获取模块用于响应用户的操作请求,从所述第一服务列表中获取所述M个服务方的地址中的第一服务方的地址。以及所述服务调用模块用于基于所述第一服务方的地址来进行服务调用。
本公开实施例的另一方面提供了一种电子设备。所述电子设备包括一个或多个存储器、以及一个或多个处理器。所述存储器存储有可执行指令。所述处理器执行所述可执行指令以实现如上所述的方法。
本公开实施例的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
本公开实施例的又一方面提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现如上所述的方法。
上述一个或多个实施例具有如下优点或有益效果:可以至少部分地解决引入分布式服务治理框架或nginx服务器等额外组件对单点服务架构进行改造而导致的较高改造成本的问题,通过配置文件获取到M个服务方的地址,并利用缓存中的第一服务列表存储M个服务方的地址,可以简单地将单点服务架构改造为多点多活的服务架构,在响应用户的操作请求时,能够直接从第一服务列表获取第一服务方的地址以进行服务调用,无需引入其他框架和组件,在满足了服务高可用性的同时,又降低了改造成本。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的可以应用服务调用方法的示例性系统架构;
图2示意性示出了根据本公开的实施例的应用于消费方的服务调用方法的流程图;
图3示意性示出了根据本公开的另一实施例的应用于消费方的服务调用方法的流程图;
图4示意性示出了根据本公开的又一实施例的应用于消费方的服务调用方法的流程图;
图5示意性示出了根据本公开的实施例的服务调用失败时的处理流程图;
图6示意性示出了根据本公开的实施例的定时遍历第二服务列表的流程图;
图7示意性示出了根据本公开的又一实施例的应用于消费方的服务调用方法的流程图;
图8示意性示出了根据本公开的实施例的应用于消费方的服务调用装置的框图;以及
图9示意性示出了根据本公开实施例的适于实现服务调用方法和装置的计算机系统的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
相关技术中,例如引入分布式服务治理框架以将单点服务调用改造为多点多活的服务调用时,除了引入服务注册中心以及监控中心外,还可能在服务方和消费方进行接口的框架适应性改造。例如原有的业务架构采用HTTP协议进行服务调用,而引入的分布式服务治理框架是基于RPC(Remote Procedure Call)协议进行服务调用,那么需要将服务方和消费方的相关接口进行适应性改造以适配RPC协议,从而产生较大的开发成本。而例如引入nginx进行多点多活的改造时,一般会增加额外的服务器来部署nginx,导致产生额外的硬件设施成本。
本公开实施例提供了一种应用于消费方的服务调用方法。服务调用方法包括:从预先设置的配置文件中获取M个服务方的地址,其中,每个服务方用于为消费方提供至少一个服务,M为大于或等于1的整数。将M个服务方的地址存储到缓存中的第一服务列表,其中,缓存包括本地缓存或分布式缓存的至少一种。响应用户的操作请求,从第一服务列表中获取M个服务方的地址中的第一服务方的地址。以及基于第一服务方的地址来进行服务调用。
根据本公开的实施例,通过配置文件获取到M个服务方的地址,并利用缓存中的第一服务列表存储M个服务方的地址,可以简单地将单点服务架构改造为多点多活的服务架构,在响应用户的操作请求时,可以直接从第一服务列表获取第一服务方的地址以进行服务调用,无需引入其他框架和组件,在满足了服务高可用性的同时,又降低了改造成本。
需要说明的是,本公开实施例提供的服务调用方法、装置、电子设备以及存储介质可用于分布式技术在服务调用过程中数据传输相关方面,也可用于除分布式技术之外的多种领域,如金融领域等。本公开实施例提供的服务调用方法、装置、电子设备以及存储介质的应用领域不做限定。
图1示意性示出了根据本公开实施例的可以应用服务调用方法的示例性系统架构100。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103,网络104和服务器105、106、107。网络104用以在终端设备101、102、103和服务器105、106、107之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105、106、107中的任一个交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105、106、107可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的服务调用请求等进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
根据本公开的实施例,一个服务可以同时部署在服务器105、106、107上,例如用户操作终端设备101、102、103上的应用软件时,终端设备101、102、103可以选择服务器105、106、107中任一个进行服务调用。此时,终端设备101、102、103可以视为消费方,服务器105、106、107可以视为服务方。
在本公开的一些实施例中,例如当服务器105、106、107中的任一个查询终端设备101、102、103中任一个的存储数据时,可以调用终端设备101、102、103上的查询服务。此时,终端设备101、102、103可以视为服务方,服务器105、106、107可以视为消费方。
在本公开的另一些实施例中,例如服务器105与服务器106上部署不同的服务,在用户对服务器105发送操作指令时,服务器105可能会调用服务器106上的服务,以返回给用户相应的操作结果。此时,服务器106可以视为服务方,服务器105可以视为消费方。
需要说明的是,本公开实施例所提供的服务调用方法一般可以由消费方(例如终端设备101、102、103或服务器105、106、107)执行,相应地,本公开实施例所提供的服务调用装置一般可以设置于消费方中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图2示意性示出了根据本公开的实施例的应用于消费方的服务调用方法的流程图。
如图2所示,本公开实施例的服务调用方法可以包括操作S210~操作S240。
在操作S210,从预先设置的配置文件中获取M个服务方的地址,其中,每个服务方用于为消费方提供至少一个服务,M为大于或等于1的整数。
根据本公开的实施例,参照图1,可以先在终端设备101上预先设置配置文件。例如用户操作终端设备101上的A应用时,A应用在启动后可以首先读取配置文件,获取配置文件中的M个服务方的地址。
根据本公开的实施例,例如M个服务方中各个服务方提供的服务相同。当消费方进行服务调用时,可以选择任一个服务方的地址发起服务调用。在本公开的一些实施例中,各个服务方提供的服务可以不同,可以预先设置包括各个服务方提供的服务的清单(例如存储在第三服务列表中)。在进行服务调用时,根据需要调用的服务从该清单确定第一服务方,然后从第一服务列表获得第一服务方的地址。
在操作S220,将M个服务方的地址存储到缓存中的第一服务列表,其中,缓存包括本地缓存或分布式缓存的至少一种。
根据本公开的实施例,在A应用获取到M个服务方的地址后,可以将各个地址存储到缓存中的第一服务列表中。其中,第一服务列表可以是A应用启动时进行初始化过程中创建的第一服务列表。另外,可以在终端设备101的本地缓存创建第一服务列表,或者可以使得终端设备101连接分布式缓存,如Redis数据库。在分布式缓存中创建第一服务列表。在本公开的一些实施例中,可以将M个服务方的地址转换为List<String>的数据类型存储到缓存中。
在操作S230,响应用户的操作请求,从第一服务列表中获取M个服务方的地址中的第一服务方的地址。
根据本公开的实施例,在操作S230中,从第一服务列表中获取M个服务方的地址中的第一服务方的地址包括:从M个服务方的地址中随机抽取一个服务方的地址作为第一服务方的地址。
根据本公开的实施例,在多个消费方(例如终端设备101、102、103)使用同一个第一服务列表的情况下,随机抽取的方式对于服务方而言能够起到负载均衡的作用。例如,若按照第一服务列表中的排列顺序依次获取服务方的地址,可能终端没备101、102、103同时获取到服务器105的地址,然后进行服务调用,会增大服务器105的负载。在终端设备101、102、103同时调用服务器105提供的同一个服务时,服务器105可能会首先满足终端设备101的服务调用,而导致终端设备102、103继续等待,降低了用户体验。
在操作S240,基于第一服务方的地址来进行服务调用。
根据本公开的实施例,例如用户操作A应用的过程中,A应用可能会远程调用服务以满足用户需求。那么,A应用可以从第一服务列表中随机抽取一个服务方的地址,例如可以抽取到服务器105的地址。然后,基于服务器105的地址向服务器105发起服务调用请求。
根据本公开的实施例,在操作S240中基于第一服务方的地址来进行服务调用包括:当服务调用失败时,停止从第一服务列表中获取第一服务方的地址来进行服务调用。
根据本公开的实施例,停止从第一服务列表中获取第一服务方的地址来进行服务调用包括:从第一服务列表中移除第一服务方的地址。或在第一服务列表中设置与第一服务方的地址相关联的停止调用标识。
根据本公开的实施例中,例如消费方在从第一服务列表中获取地址时,可以先读取每个地址对应的调用标识,例如标识为On时,则代表可以调用。在标识为Off时,代表不能调用。
根据本公开的实施例,通过配置文件获取到M个服务方的地址,并利用缓存中的第一服务列表存储M个服务方的地址,可以简单地将单点服务架构改造为多点多活的服务架构,在响应用户的操作请求进行服务调用时,可以直接从第一服务列表获取第一服务方的地址以进行服务调用,无需引入其他框架和组件,在满足了服务高可用性的同时,又降低了改造成本。
图3示意性示出了根据本公开的另一实施例的应用于消费方的服务调用方法的流程图。
如图3所示,本公开实施例的服务调用方法可以包括操作S210~操作S240。在操作210从预先设置的配置文件中获取M个服务方的地址之前,还可以包括操作S310~操作S320。其中,操作S210~操作S240的内容可以参照图2,在此不做赘述。
在操作S310,接收用户手工配置M个服务方的地址的操作。
在操作S320,响应操作设置配置文件。
根据本公开的实施例,参照图1,用户可以将M个服务方的地址以配置文件为载体在终端设备101进行手工配置。例如,可以在A应用的安装包内提前设置包括M个服务方的地址的配置文件。还可以在接收到A应用安装的操作后,终端设备101发出是否设置配置文件的提示,在用户选择同意设置后,向用户展示手工配置界面。
在相关技术中,例如分布式服务治理框架会设立注册中心以管理服务方的地址,利用本公开实施例的服务调用方法,可以通过手工配置的方式管理服务方的地址,无需引入如注册中心等额外的组件执行配置操作,降低改造成本。
图4示意性示出了根据本公开的又一实施例的应用于消费方的服务调用方法的流程图。
如图4所示,本公开实施例的服务调用方法可以包括操作S210~操作S240,在操作S240基于第一服务方的地址来进行服务调用之后,还可以包括操作操作S410~操作S450。其中,操作S210~操作S240可以参照图2,在此不做赘述。
在操作S410,判断在操作S240中基于第一服务方的地址发起的服务调用是否成功。当服务调用成功时,则结束本次操作。当服务调用失败时,停止从第一服务列表中获取第一服务方的地址来进行服务调用,然后可以执行操作S420。
根据本公开的实施例,将i的初始值赋为1,循环执行操作S420~操作S450,直至服务调用成功或者执行M-1次:
在操作S420,从第一服务列表中获取第i个服务方的地址。
根据本公开的实施例,参照图1,例如终端设备101首先使用服务器105的地址进行服务调用,然后,终端设备101可能收到服务器105无法提供服务的提示,或者规定时间内没有收到服务器105返回的服务数据,那么终端设备101可以确定服务调用失败。接着,终端设备101可以获取服务器106的地址进行服务调用。
在操作S430,基于第i个服务方的地址来进行服务调用。
在操作S440,判断在操作S430中基于第i个服务方的地址发起的服务调用是否成功。若服务调用成功,则结束本次循环。若服务调用失败,则执行操作S450。
在操作S450,停止从第一服务列表中获取第i个服务方的地址来进行服务调用,并令i=i+1,然后执行操作S420。
根据本公开的实施例,若终端设备101成功调用了服务器106上的服务,则结束本次循环。若终端设备101收到服务器106无法提供服务的提示,或者规定时间内没有收到服务器106返回的服务数据,那么可以确定服务调用失败。然后,终端设备101可以获取服务器107的地址进行服务调用。
根据本公开的实施例,在一个服务方的地址不能提供服务时,能够循环获取其他服务方的地址进行服务调用,避免针对一个无法提供服务的服务方重复发起服务调用,从而提高服务调用效率。
图5示意性示出了根据本公开的实施例的服务调用失败时的处理流程图。
如图5所示,当基于M个服务方的地址中的一个服务方的地址进行服务调用失败时,对该服务方的地址可以执行操作S510~操作S530。
在操作S510,获取服务调用失败时间。
在操作S520,基于第一预设时长和失败时间,确定重试时间戳。
根据本公开的实施例,参照图1,例如终端设备101基于服务器105的地址进行服务调用失败后,可以将发起服务调用的时间作为调用失败时间,例如下午2:10,往后延1个小时(即第一预设时长,仅为示例),确定重复时间戳为下午3:10。
在操作S530,将该服务方的地址和重试时间戳相关联地存储到缓存中的第二服务列表。
根据本公开的实施例,可以将服务器105的地址以及重复时间戳以HashMap<KEY,VALUE>的数据类型存储到缓存中,以形成第二服务列表。其中,KEY对应存储服务地址,VALUE对应存储重复时间戳。
相关技术中,例如在引入分布式服务治理框架后,可能会引入监控中心以监控服务方的状态,在服务方恢复正常后,由监控中心通知消费方可以继续进行服务调用。利用本公开实施例的服务调用方法,通过服务重试的机制为每个服务调用失败的地址确定重试时间戳,以便服务方恢复正常后能够继续提供服务,而无需监控服务方的当前状态,因此不用引入额外的监控中心,从而降低了改造成本。
图6示意性示出了根据本公开的实施例的定时遍历第二服务列表的流程图。
根据本公开的实施例,第二服务列表包括M个服务方的地址中服务调用失败的N个服务方的地址,N为大于或等于1的整数,N小于或等于M。如图6所示,每隔第二预设时长,将n的初始值赋为1,循环执行操作S610~操作S640,直至执行N次。
在操作S610,从第二服务列表中获取第n个服务方的地址,以及与第n个服务方的地址对应的重试时间戳。
根据本公开的实施例,可以在消费方启动一个定时任务,例如每隔0.5个小时对第二服务列表中的每个服务方地址,及对应的重试时间戳进行遍历判断。比如在下午3:30分,从第二服务列表中获取到服务器105的地址,以及对应的重试时间戳为下午3:10。
在操作S620,将重试时间戳与当前时刻进行对比。
在操作S630,在当前时刻小于重试时间戳时,令n=n+1,然后执行操作S610。
在操作S640,在当前时刻大于或等于重试时间戳时,将第n个服务方的地址及重试时间戳从第二服务列表中移除,并允许从第一服务列表中获取第n个服务方的地址来进行服务调用,令n=n+1,然后执行操作S610。
根据本公开的实施例,将当前时刻下午3:30与下午3:10进行对比后,确定服务器105的重试时间已到,则可以将服务器105的地址以及重试时间戳(下午3:10)从第二服务列表中移除。
在本公开的一些实施例中,若第一服务列表和第二服务列表存储在本地缓存中,终端设备101可以继续从第一服务列表中获取到服务器105。
在本公开的一些实施例中,若第一服务列表和第二服务列表存储在分布式缓存中,当终端设备101基于服务器105的地址进行服务调用失败后,停止从第一服务列表中继续获取服务器105的地址。然后终端设备102、103在访问分布式缓存中的第一服务列表时,也不会获取服务器105的地址进行服务调用。相应地,当从第二服务列表中移除服务器105的地址后,终端设备101、102、103在进行服务调用时,都可以从第一服务列表中获取服务器105的地址。
根据本公开的实施例,通过服务重试的机制定时判断每个服务调用失败的地址是否到了重试时间,如重试时间已到,可以重新恢复该服务方地址的获取,以便服务方恢复正常后能够继续提供服务。
图7示意性示出了根据本公开的又一实施例的应用于消费方的服务调用方法的流程图。
如图7所示,本公开实施例的服务调用方法可以包括操作S710~操作S780。其中,该分布式服务架构中可以包括消费方A和消费方B,服务方A和服务方B。一个服务可以同时部署在服务方A和B。下面以消费方A向服务方A发起服务为例,详细说明本公开实施例的服务调用方法的流程图。
在操作S710,首先进行初始化操作,例如将服务方的地址手动配置到消费方A中的配置文件里,并在缓存中创建空的第一服务列表和第二服务列表。
在操作S720,启动消费方A。消费方A启动时读取配置文件的服务列表,然后解析服务列表,将可用的服务方的地址以List<String>的数据类型存储到第一服务列表中,将不可用的服务方的地址以HashMap<KEY,VALUE>的数据类型存储到第二服务列表中,其中KEY存储服务地址,VALUE存储重试时间戳,此重试时间戳为服务方可重试的时间。需要说明的是,服务启动时,默认服务列表的所有服务方的地址均可用,因此将所有服务方的地址均初始化到第一服务列表中,从而第二服务列表中内容为空。
在操作S730,消费方A发起服务调用时,从第一服务列表中随机获取一个服务方的地址进行服务调用,例如服务方A的地址。
在操作S740,如果服务调用正常,则流程结束。
在操作S750,如果服务调用异常,则将该服务方的地址从第一服务列表中移除,再次从第一服务列表中随机获取另一服务地址进行服务调用,同时将调用异常的服务方A的地址加入到不可用的第二服务列表中,将服务方A的地址设置为KEY,下次可重试时间设置为VALUE。
在操作S760,在消费方A启动一个定时任务,定时对不可用的第二服务列表进行遍历判断。
在操作S770,例如从第二服务列表获取一条服务方A的地址记录信息,并获取其可重试时间戳(VALUE值),判断其是否小于当前时刻,如果不小于则说明不可重试,将其放回第二服务列表,然后获取并判断下一条记录。
在操作S780,如果小于当前时间,说明可重试,则将其从不可用的第二服务列表中移除,同时将服务地址(KEY值)加入到可用的第一服务列表中,使消费方A可重新获取服务方A的地址进行服务调用。
图8示意性示出了根据本公开的实施例的应用于消费方的服务调用装置的框图。
如图8所示,服务调用装置800包括第一获取模块810、地址存储模块820、第二获取模块830和服务调用模块840。
第一获取模块810例如可以执行操作S210,用于从预先设置的配置文件中获取M个服务方的地址,其中,每个服务方用于为消费方提供至少一个服务,M为大于或等于1的整数。
地址存储模块820例如可以执行操作S220,用于将M个服务方的地址存储到缓存中的第一服务列表,其中,缓存包括本地缓存或分布式缓存的至少一种。
第二获取模块830例如可以执行操作S230,用于响应用户的操作请求,从第一服务列表中获取M个服务方的地址中的第一服务方的地址。
根据本公开的实施例,从第一服务列表中获取M个服务方的地址中的第一服务方的地址包括:从M个服务方的地址中随机抽取一个服务方的地址作为第一服务方的地址。
服务调用模块840例如可以执行操作S240,用于基于第一服务方的地址来进行服务调用。
根据本公开的实施例,基于第一服务方的地址来进行服务调用包括:当服务调用失败时,停止从第一服务列表中获取第一服务方的地址来进行服务调用。
根据本公开的实施例,停止从第一服务列表中获取第一服务方的地址来进行服务调用包括:从第一服务列表中移除第一服务方的地址。或在第一服务列表中设置与第一服务方的地址相关联的停止调用标识。
根据本公开的实施例,服务调用模块840例如可以用于在停止从第一服务列表中获取第一服务方的地址来进行服务调用之后,将i的初始值赋为1,循环执行执行操作S410~操作S450,直至服务调用成功或者执行M-1次,用于从第一服务列表中获取第i个服务方的地址。基于第i个服务方的地址来进行服务调用。当服务调用成功时,结束本次循环。当服务调用失败时,停止从第一服务列表中获取第i个服务方的地址来进行服务调用,并令i=i+1。
根据本公开的实施例,服务调用装置800还可以包括配置模块。配置模块例如可以执行操作S310~操作S320,用于接收用户手工配置M个服务方的地址的操作。响应操作设置配置文件。
根据本公开的实施例,服务调用装置800还可以包括处理模块。处理模块例如可以用于当基于M个服务方的地址中的一个服务方的地址进行服务调用失败时,对该服务方的地址执行操作S510~操作S530,用于获取服务调用失败时间。基于第一预设时长和失败时间,确定重试时间戳。将该服务方的地址和重试时间戳相关联地存储到缓存中的第二服务列表。
根据本公开的实施例,第二服务列表包括M个服务方的地址中服务调用失败的N个服务方的地址,N为大于或等于1的整数,N小于或等于M。服务调用装置800还可以包括定时模块。定时模块例如可以执行操作S610~操作S640,用于每隔第二预设时长,将n的初始值赋为1,循环执行以下操作直至执行N次:从第二服务列表中获取第n个服务方的地址,以及与第n个服务方的地址对应的重试时间戳。将重试时间戳与当前时刻进行对比。在当前时刻小于重试时间戳时,令n=n+1。在当前时刻大于或等于重试时间戳时,将第n个服务方的地址及重试时间戳从第二服务列表中移除,并允许从第一服务列表中获取第n个服务方的地址来进行服务调用,然后令n=n+1。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,第一获取模块810、地址存储模块820、第二获取模块830和服务调用模块840中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,第一获取模块810、地址存储模块820、第二获取模块830和服务调用模块840中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,第一获取模块810、地址存储模块820、第二获取模块830和服务调用模块840中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图9示意性示出了根据本公开实施例的适于实现对象处理方法和系统的计算机系统的方框图。图9示出的计算机系统仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图9所示,根据本公开实施例的计算机系统900包括处理器901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。处理器901例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器901还可以包括用于缓存用途的板载存储器。处理器901可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 903中,存储有系统900操作所需的各种程序和数据。处理器901、ROM 902以及RAM 903通过总线904彼此相连。处理器901通过执行ROM 902和/或RAM 903中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 902和RAM 903以外的一个或多个存储器中。处理器901也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,系统900还可以包括输入/输出(I/O)接口905,输入/输出(I/O)接口905也连接至总线904。系统900还可以包括连接至I/O接口905的以下部件中的一项或多项:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被处理器901执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行本公开实施例所提供的方法的程序代码,当计算机程序产品在电子设备上运行时,该程序代码用于使电子设备实现本公开实施例所提供的可以应用于消费方的服务调用方法。
在该计算机程序被处理器901执行时,执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分909被下载和安装,和/或从可拆卸介质911被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (8)
1.一种服务调用方法,应用于至少两个消费方,预先将M个服务方的地址配置到所述至少两个消费方中的配置文件,并在所述至少两个消费方缓存中创建空的第一服务列表和第二服务列表,所述方法包括:对于任一个消费方,
从预先设置的所述配置文件中获取所述M个服务方的地址,其中,每个所述服务方用于为所述至少两个消费方提供至少一个服务,M为大于1的整数;
将所述M个服务方的地址存储到所述缓存中的第一服务列表,其中,所述缓存为分布式缓存;
响应用户的操作请求,从所述第一服务列表中获取所述M个服务方的地址中的第一服务方的地址;以及
基于所述第一服务方的地址来进行服务调用;
其中,所述方法还包括:当基于所述M个服务方的地址中的一个服务方的地址进行服务调用失败时,对该服务方的地址执行以下操作:
获取服务调用失败时间;
基于第一预设时长和所述失败时间,确定重试时间戳;
将该服务方的地址和所述重试时间戳相关联地存储到所述缓存中的第二服务列表;
其中,所述基于所述第一服务方的地址来进行服务调用包括:
当服务调用失败时,所述至少两个消费方皆停止从所述第一服务列表中获取所述第一服务方的地址来进行服务调用;
其中,所述停止从所述第一服务列表中获取所述第一服务方的地址来进行服务调用包括:
从所述第一服务列表中移除所述第一服务方的地址;或
在所述第一服务列表中设置与所述第一服务方的地址相关联的停止调用标识。
2.根据权利要求1所述的服务调用方法,其中,在所述停止从所述第一服务列表中获取所述第一服务方的地址来进行服务调用之后,所述方法还包括:
将i的初始值赋为1,循环执行以下操作,直至服务调用成功或者执行M-1次:
从所述第一服务列表中获取第i个服务方的地址;
基于所述第i个服务方的地址来进行服务调用;
当服务调用成功时,结束本次循环;
当服务调用失败时,停止从所述第一服务列表中获取所述第i个服务方的地址来进行服务调用,并令i=i+1。
3.根据权利要求1所述的服务调用方法,其中,所述第二服务列表包括所述M个服务方的地址中服务调用失败的N个服务方的地址,N为大于或等于1的整数,N小于或等于M,其中,所述方法还包括:每隔第二预设时长,
将n的初始值赋为1,循环执行以下操作直至执行N次:
从所述第二服务列表中获取第n个服务方的地址,以及与所述第n个服务方的地址对应的重试时间戳;
将所述重试时间戳与当前时刻进行对比;
在当前时刻小于所述重试时间戳时,令n=n+1;
在当前时刻大于或等于所述重试时间戳时,将所述第n个服务方的地址及所述重试时间戳从所述第二服务列表中移除,并允许从所述第一服务列表中获取所述第n个服务方的地址来进行服务调用,然后令n=n+1。
4.根据权利要求1所述的服务调用方法,其中,所述从所述第一服务列表中获取所述M个服务方的地址中的第一服务方的地址包括:
从所述M个服务方的地址中随机抽取一个服务方的地址作为所述第一服务方的地址。
5.根据权利要求1所述的服务调用方法,其中,在从预先设置的配置文件中获取M个服务方的地址之前,所述方法还包括:
接收用户手工配置所述M个服务方的地址的操作;
响应所述操作设置所述配置文件。
6.一种服务调用装置,应用于至少两个消费方,预先将M个服务方的地址配置到所述至少两个消费方中的配置文件,并在所述至少两个消费方缓存中创建空的第一服务列表和第二服务列表,所述装置包括:
第一获取模块,用于从预先设置的所述配置文件中获取所述M个服务方的地址,其中,每个所述服务方用于为所述至少两个消费方提供至少一个服务,M为大于1的整数;
地址存储模块,用于将所述M个服务方的地址存储到所述缓存中的第一服务列表,其中,所述缓存为 分布式缓存;
第二获取模块,用于响应用户的操作请求,从所述第一服务列表中获取所述M个服务方的地址中的第一服务方的地址;以及
服务调用模块,用于基于所述第一服务方的地址来进行服务调用;
所述装置还包括处理模块,用于当基于所述M个服务方的地址中的一个服务方的地址进行服务调用失败时,对该服务方的地址执行以下操作:
获取服务调用失败时间;
基于第一预设时长和所述失败时间,确定重试时间戳;
将该服务方的地址和所述重试时间戳相关联地存储到所述缓存中的第二服务列表;
其中,所述基于所述第一服务方的地址来进行服务调用包括:
当服务调用失败时,所述至少两个消费方皆停止从所述第一服务列表中获取所述第一服务方的地址来进行服务调用;
其中,所述停止从所述第一服务列表中获取所述第一服务方的地址来进行服务调用包括:
从所述第一服务列表中移除所述第一服务方的地址;或
在所述第一服务列表中设置与所述第一服务方的地址相关联的停止调用标识。
7.一种电子设备,包括:
一个或多个存储器,存储有可执行指令;以及
一个或多个处理器,执行所述可执行指令,以实现根据权利要求1~5中任一项所述的方法。
8.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110514286.5A CN113259431B (zh) | 2021-05-11 | 2021-05-11 | 服务调用方法、服务调用装置、电子设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110514286.5A CN113259431B (zh) | 2021-05-11 | 2021-05-11 | 服务调用方法、服务调用装置、电子设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113259431A CN113259431A (zh) | 2021-08-13 |
CN113259431B true CN113259431B (zh) | 2022-11-11 |
Family
ID=77223030
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110514286.5A Active CN113259431B (zh) | 2021-05-11 | 2021-05-11 | 服务调用方法、服务调用装置、电子设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113259431B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105635331A (zh) * | 2014-11-18 | 2016-06-01 | 阿里巴巴集团控股有限公司 | 一种分布式环境下的服务寻址方法及装置 |
CN108234666A (zh) * | 2018-01-16 | 2018-06-29 | 云宏信息科技股份有限公司 | 一种微服务调用系统、方法及计算机存储介质 |
CN110377419A (zh) * | 2019-06-11 | 2019-10-25 | 北京达佳互联信息技术有限公司 | 一种服务器调用方法、装置和电子设备 |
CN111984309A (zh) * | 2020-08-31 | 2020-11-24 | 北京达佳互联信息技术有限公司 | 服务调用方法、装置、服务器及存储介质 |
CN112114979A (zh) * | 2020-08-31 | 2020-12-22 | 厦门安胜网络科技有限公司 | 远程过程调用方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5025116B2 (ja) * | 2005-10-25 | 2012-09-12 | キヤノン株式会社 | 情報処理装置及びその制御方法ならびにプログラム |
-
2021
- 2021-05-11 CN CN202110514286.5A patent/CN113259431B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105635331A (zh) * | 2014-11-18 | 2016-06-01 | 阿里巴巴集团控股有限公司 | 一种分布式环境下的服务寻址方法及装置 |
CN108234666A (zh) * | 2018-01-16 | 2018-06-29 | 云宏信息科技股份有限公司 | 一种微服务调用系统、方法及计算机存储介质 |
CN110377419A (zh) * | 2019-06-11 | 2019-10-25 | 北京达佳互联信息技术有限公司 | 一种服务器调用方法、装置和电子设备 |
CN111984309A (zh) * | 2020-08-31 | 2020-11-24 | 北京达佳互联信息技术有限公司 | 服务调用方法、装置、服务器及存储介质 |
CN112114979A (zh) * | 2020-08-31 | 2020-12-22 | 厦门安胜网络科技有限公司 | 远程过程调用方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113259431A (zh) | 2021-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110310034B (zh) | 一种应用于SaaS的服务编排、业务流程处理方法和装置 | |
CN105718540B (zh) | 数据加载方法和装置 | |
CN107547629B (zh) | 客户端静态资源下载的方法、装置、电子设备和可读介质 | |
CN109783151B (zh) | 规则变更的方法和装置 | |
CN113900834B (zh) | 基于物联网技术的数据处理方法、装置、设备及存储介质 | |
CN111478781B (zh) | 一种消息广播的方法和装置 | |
CN113505302A (zh) | 支持动态获取埋点数据的方法、装置、系统及电子设备 | |
CN110968331A (zh) | 应用程序运行的方法和装置 | |
CN109981546B (zh) | 获取应用模块间的远程调用关系的方法和装置 | |
CN113360377A (zh) | 一种测试方法和装置 | |
CN110730197A (zh) | 一种服务发现方法和系统 | |
CN113259431B (zh) | 服务调用方法、服务调用装置、电子设备以及存储介质 | |
CN107045452B (zh) | 虚拟机调度方法和装置 | |
CN112398669A (zh) | 一种Hadoop部署方法和装置 | |
CN111831503A (zh) | 一种基于监控代理的监控方法和监控代理装置 | |
CN113779122B (zh) | 导出数据的方法和装置 | |
CN117642724A (zh) | 使用无服务器计算系统的流式分析 | |
CN114168607A (zh) | 全局序列号生成方法、装置、设备、介质和产品 | |
CN112597224A (zh) | 数据导出方法、数据导出装置、电子设备及介质 | |
CN112860505A (zh) | 一种分布式集群的调控方法及装置 | |
CN113765983A (zh) | 一种站点服务的部署方法和装置 | |
CN112860447A (zh) | 一种不同应用间的交互方法和系统 | |
CN110868477A (zh) | 任务调度方法、装置及系统 | |
US11722451B2 (en) | Distributing event messages from a first service to additional services using a message store | |
CN115373802A (zh) | 代理系统的重启方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |