CN112256455A - 一种优化交易远程过程调用的方法、介质和电子设备 - Google Patents

一种优化交易远程过程调用的方法、介质和电子设备 Download PDF

Info

Publication number
CN112256455A
CN112256455A CN202011193621.8A CN202011193621A CN112256455A CN 112256455 A CN112256455 A CN 112256455A CN 202011193621 A CN202011193621 A CN 202011193621A CN 112256455 A CN112256455 A CN 112256455A
Authority
CN
China
Prior art keywords
name
module
called
calling
call
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.)
Pending
Application number
CN202011193621.8A
Other languages
English (en)
Inventor
胡康康
李承文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Construction Bank Corp
Original Assignee
China Construction Bank Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Construction Bank Corp filed Critical China Construction Bank Corp
Priority to CN202011193621.8A priority Critical patent/CN112256455A/zh
Publication of CN112256455A publication Critical patent/CN112256455A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供一种优化交易远程过程调用的方法、介质和电子设备,该方法包括:获取配置文件;根据配置文件确定对待调用方法进行本地调用或者内呼调用。随着应用系统的日益庞大及交易的日趋复杂,单体应用逐渐无法满足业务发展需要。为了在对原有业务系统侵入较少的情况下实现分布式改造,本发明以一种可配置的方式,可同时支持方法的本地调用和内呼调用。如果在配置文件中配置某方法为本地调用,将直接调用本应用中的方法;如果在配置文件中配置某方法为内呼调用,则根据配置文件中的目标模块名称,通过内呼调用目标模块中的同名方法。该方法可以达到无侵入的方式实现了分布式改造及部署的目的。

Description

一种优化交易远程过程调用的方法、介质和电子设备
技术领域
本发明涉及交易的相互调用,具体涉及一种优化交易远程过程调用的方法、介质和电子设备。
背景技术
金融行业是国计民生的重要领域,金融系统的高效性和稳定性对于保证居民的日常生活具有至关重要的作用。金融交易分为简单交易和复合交易,复合交易涉及到不同交易之间的相互调用。
金融系统与国计民生息息相关。在进行金融交易时,需要涉及到不同交易之间的相互调用。如何既保证交易提供基础功能,又满足可扩展性、可维护性及高性能的要求,是行业亟需解决的技术问题。
发明内容
本发明实施例提供一种优化交易远程过程调用的方法、介质和电子设备,以达到无侵入的方式实现了分布式改造及部署的目的。
根据本公开第一方面,提供一种优化交易远程过程调用的方法,其包括:
获取配置文件;
根据配置文件确定对待调用方法进行本地调用或者内呼调用。
在可能的实施方式中,所述根据配置文件确定对待调用方法进行本地调用或者内呼调用,具体可以包括:
从所述配置文件中获取对所述待调用方法的注册描述信息;其中,所述注册描述信息包括:待调用的模块名称;
如果所述待调用的模块名称为本模块名称,则直接在本地调用所述待调用方法;其中,所述本模块是服务调用方所在的模块;
如果所述待调用的模块名称为所述本模块名称以外的目标模块名称,则通过内呼调用来调用所述目标模块名称的对应方法;其中,所述目标模块是服务提供方所在的模块。
在可能的实施方式中,在所述获取配置文件之前,还可以包括:
为待调用方法加入SpecCall注解;
调用SpecCall统一拦截器;
根据所述待调用方法,获取包名、类名和方法名;
获取本模块名称。
在可能的实施方式中,所述方法还可以包括:根据包名、类名和方法名获取待调用的模块。
在可能的实施方式中,所述通过内呼调用来调用所述目标模块名称的对应方法,具体可以包括:
获取所述目标模块的内呼服务交易码,封装内呼请求信息,发起内呼。
在可能的实施方式中,所述内呼请求信息包括报文头和报文体;其中,所述报文头包括:交易码、交易版本、全局流水号、时间戳、以及安全节点号;所述报文体包括COM域和实体域,所述实体域为详细的请求信息。
在可能的实施方式中,所述获取本模块名称,具体可以包括:
从pom.xml文件的对应profiel标签中的moduleName.current属性中获取本模块名称。
在可能的实施方式中,在获取所述目标模块的内呼服务交易码,封装内呼请求信息,发起内呼之后,还可以包括:
对服务提供方发送的内呼响应对象进行解封装,获取最终执行结果;其中,所述内呼响应对象包括:返回数据信息和用于指示成功或失败的返回结果;所述解封装是获取返回数据信息。
根据本公开第二方面,提供一种优化交易远程过程调用的方法,其包括:
接收内呼请求;
根据内呼请求传入的参数获取包名、类名、方法名及JavaBean名称;
判断JavaBean名称是否为空;
如果所述JavaBean名称为空,则创建新的对象实例;
利用创建的新对象实例执行反射调用,向服务调用方返回执行结果;
将所述执行结果封装为内呼响应对象,并且发送给服务调用方。
在一些可能的实施方式中,所述方法还可以包括:
如果所述JavaBean名称不为空,则从Spirng容器获取对象实例;
利用从Spirng容器获取的对象实例执行反射调用,向服务调用方返回执行结果;
将所述执行结果封装为内呼响应对象,并且发送给服务调用方。
根据本公开第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的任意一种优化交易远程过程调用的方法。
根据本公开第四方面,提供一种电子设备,其包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上所述的任意一种优化交易远程过程调用的方法。
上述技术方案具有如下有益效果:
内呼交易和外呼交易使用不同的序列化和反序列化方式进行RPC调用,提升了性能。
单体应用进行分布式改造时,只需通过配置的方式即可实现不同模块的拆分。
单体应用进行分布式改造时,只需通过profile标签即可实现不同部署单元的分布式部署。
注解可同时兼容本地方法调用和RPC内呼调用。
该方案可以优化服务拆分及部署。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的外呼调用的流程图;
图2是本发明实施例的内呼调用的流程图;
图3是本发明实施例的一种优化交易远程过程调用的方法的流程图;
图4是本发明实施例的另一种优化交易远程过程调用的方法的流程图;
图5是本发明实施例的作为一个举例的优化交易远程过程调用的方法的流程图;
图6是本发明实施例的存储介质的功能框图;
图7是本发明实施例的电子设备的功能框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
术语解释:
RPC调用:即远程过程调用(Remote Procedure Call),是一个计算机通信协议,它允许运行于一台计算机的程序调用另一台计算机的子程序,而无需额外地为这个交互作用编程。通过RPC调用,程序能利用其它程序或计算机处理的进程。RPC传输效率较高,而且发起调用的一方无需知道RPC的具体实现,如同调用本地方法。
序列化:即Serialization,是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
反序列化:即Deserialization,把磁盘或网络节点上的字节序列恢复到对象的过程称为对象的反序列化。
Hessian:是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。相比WebService,Hessian更简单、快捷。因为采用的是二进制RPC协议,所以它很适合于发送二进制数据。
Gson:是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符串转成一个Java对象,或者将一个Java转化为Json字符串。Gson主要有快捷高效、代码量少、面向对象、数据传递和解析方便等特点。
注解:本文档中的注解特指Java注解。jdk1.5之后Java增加了对元数据(MetaData)的支持,也就是Annotation(注解),它是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应操作。
内呼:系统内部之间的RPC调用。
外呼:系统与外部系统之间的RPC调用。
本发明实施例提出了内呼和外呼相结合的RPC调用方式,在调用内部系统和外部系统时采用不同的传输协议,保证了RPC调用的性能要求。
随着系统及交易的日益复杂,从单体应用转向分布式或微服务成为大的趋势。如何在对原有应用侵入较少的情况下实现分布式改造,是必须考虑的重要方面。本发明实施例采用可配置的方式实现模块拆分及调用,通过相关配置可决定交易调用本地方法还是通过RPC内呼调用其他模块,从而以一种无侵入的方式实现了分布式改造及部署。
在分布式应用日趋广泛的情况下,需要将原有单体应用改造为分布式应用,通过在对原有应用侵入较少的情况下实现分布式部署,可以节约成本,提升效率,同时实现应用的横行扩展。本发明实施例针对上述问题提出了一种优化交易RPC调用的方法。
本发明实施例涉及金融系统RPC调用,具体地说,提出了一种优化交易RPC调用的方法。
本发明实施例采用内呼和外呼结合的方法来实现交易RPC调用,并在分布式改造过程中通过配置方式决定是采用本地调用还是内呼调用。
金融系统可以看作是各种交易的组合体,而交易之间也会存在相互调用的情况。RPC调用,即远程过程调用(Remote Procedure Call),是一个计算机通信协议,它允许运行于一台计算机的程序调用另一台计算机的子程序,而无需额外地为这个交互作用编程。通过RPC调用,程序能利用其它程序或计算机处理的进程。RPC传输效率较高,而且发起调用的一方无需知道RPC的具体实现,如同调用本地方法。
RPC调用涉及服务提供方和服务调用方,是通过对象的序列化和反序列化来实现的。序列化是将对象转换为字节序列的过程;反序列化是指把字节序列恢复为对象的过程。本发明实施例中可以采用的序列化和反序列化框架有Hessian、Gson、FastJson、Thrift、Kryo等。
在进行服务调用时,可能会涉及到外部调用。外部系统和本系统采用的编程语言、系统架构、技术栈等可能会有差异。在这种场景下,需要提供与编程语言和具体平台无关的序列化方式。本发明实施例采用Hessian协议,通过外呼的方式来实现与外部系统的服务调用。Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。相比WebService,Hessian更简单、快捷,具有与平台无关等特性。因为采用的是二进制RPC协议,所以它很适合于发送二进制数据。本发明实施例在对外部系统服务进行调用时,使用Hessian方式。
图1是本发明实施例的外呼调用的流程图。如图1所示,外呼调用具体包括以下步骤:
S11:注册外呼交易对端系统节点,包括对端系统IP、端口、超时时间、请求URL等。
S12:注册外呼交易服务,包含交易码、对端系统节点等信息。
对某交易发起外呼时,会根据注册的外呼交易找到对端系统节点,然后根据相关负载均衡策略,通过Zookeeper服务器调用相关的对端服务,接收返回报文。各个服务作为独立的应用提供服务,需要有独立于应用的其他服务器对其进行管理,Zookeeper服务器可以提供服务注册及服务寻址的功能。可替换地,也可以用redis服务器或通过自定义算法实现。
S13:注册外呼请求报文和响应报文。
系统将会按照相关的格式对上述外呼请求报文和响应报文进行封装与解析。在一些实施例中,报文包括报文头和报文体。其中,报文头包括交易码、交易版本、全局流水号、时间戳、安全节点号等信息,报文体包括COM域和实体域,实体域为详细的请求或相应信息。
S14:定义外呼处理栈。
外呼处理栈定义了性能监控拦截器、流控拦截器、分片键拦截器、Hessian处理拦截器等一系列拦截器。报文接入时会以责任链方式依次执行相关处理请求,最后对报文进行Hessian序列化或反序列化后返回给服务发起方。
责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求。这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。在金融交易中使用责任链模式,方便了交易处理。
对于内部系统之间的服务调用,由于相互之间的开发语言、系统架构都比较一致,为了解决Hessian调用时效率不高的问题,本发明实施例采用Gson格式进行对象的序列化和反序列化。Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符串转换成一个Java对象,或者将一个Java对象转化为Json字符串。Gson主要有快捷高效、代码量少、面向对象、数据传递和解析方便等特点。通过Gson进行内呼调用,可以使调用性能得到显著提升。
图2是本发明实施例的内呼调用的流程图。如图2所示,内呼调用具体包括以下步骤:
S21:注册内呼交易服务。
对某交易发起内呼时,会按照相关负载均衡策略,通过Zookeeper服务器调用相关的对端服务,接收返回报文。
S22:定义内呼请求和响应实体。
内呼请求和响应实体以jar包的形式提供,服务提供方和服务调用方均需引入该实体jar包。系统将会按照相关的实体字段信息对报文进行统一封装与解析。通过jar包形式封装后,隐藏了技术细节,方便了业务开发人员使用。作为可替换的实施方式,本发明还可以通过业务人员在代码中直接定义内呼请求和响应实体,但这样会造成标准不统一,对业务开发人员会相对复杂一些。
S23:定义内呼处理栈。
内呼处理栈定义了性能监控拦截器、流控拦截器、分片键拦截器、Gson处理拦截器等一系列拦截器。报文接入时会以责任链方式依次执行相关处理请求,最后对报文进行Gson序列化或反序列化后返回给服务发起方。
随着应用系统的日益庞大及交易的日趋复杂,单体应用逐渐无法满足业务发展需要。为了在对原有业务系统侵入较少的情况下实现分布式改造,本发明实施例提出一种基于配置的方式进行模块的分布式拆分,以一种可配置的方式,可同时支持方法的本地调用和内呼调用。如果在配置文件中配置某方法为本地调用,将直接调用本应用(本应用指的是某个具体的项目或应用程序)中的方法;如果在配置文件中配置某方法为内呼调用,则根据配置文件中的目标模块名称,通过内呼调用目标模块中的同名方法。
如图3所示,由服务调用方执行的一种优化交易远程过程调用的方法包括如下步骤:
S110:获取配置文件。
S120:根据配置文件确定对待调用方法进行本地调用或者内呼调用。
在一些实施例中,步骤S120中根据配置文件确定对待调用方法进行本地调用或者内呼调用,具体可以包括:
从配置文件中获取对待调用方法的注册描述信息;其中,注册描述信息包括:待调用的模块名称;具体地,上述模块指的某一个子应用系统,待调用方法属于待调用模块中的一个具体方法。例如:信用卡分期审批系统是一个模块,更新商户信息是这个模块的一个方法。
如果待调用的模块名称为本模块名称,则直接在本地调用待调用方法;其中,本模块是服务调用方所在的模块;
如果待调用的模块名称为本模块名称以外的目标模块名称,则通过内呼调用来调用目标模块名称的对应方法;其中,目标模块是服务提供方所在的模块。
在一些实施例中,在获取配置文件之前,还可以包括如下步骤:为待调用方法加入SpecCall注解;调用SpecCall统一拦截器;根据待调用方法,获取包名、类名和方法名;获取本模块名称。
在一些实施例中,还可以包括如下步骤:根据包名、类名和方法名获取待调用的模块名称。作为一个举例,在配置文件中配置了一个key-value项,key为包名+类名+方法名,value为对应模块名称+逗号+bean名称。根据包名、类名和方法名,从配置文件中根据映射关系可以获取到需要调用哪个模块。
在一些实施例中,通过内呼调用来调用目标模块名称的对应方法,具体可以包括:获取目标模块的内呼服务交易码,封装内呼请求信息,发起内呼。
在一些实施例中,内呼请求信息包括报文头和报文体;其中,报文头包括:交易码、交易版本、全局流水号、时间戳、以及安全节点号;报文体包括COM域和实体域,实体域为详细的请求信息。
在一些实施例中,获取本模块名称,具体可以包括如下步骤:从pom.xml文件的对应profiel标签中的moduleName.current属性中获取本模块名称。
在一些实施例中,在获取目标模块的内呼服务交易码,封装内呼请求信息,发起内呼之后,还包括如下步骤:对服务提供方发送的内呼响应对象进行解封装,获取最终执行结果;其中,内呼响应对象包括:返回数据信息和用于指示成功或失败的返回结果;解封装是获取返回数据信息。
在一些实施例中,服务发起方在发起调用前,可以对相关参数进行序列化;服务提供方接收到请求后,可以对相关参数进行反序列化。
如图4所示,由服务提供方执行的一种优化交易远程过程调用的方法,包括如下步骤:
S210:接收内呼请求;
S220:根据内呼请求传入的参数获取包名、类名、方法名及JavaBean名称;
S230:判断JavaBean名称是否为空;
S240:如果JavaBean名称为空,则创建新的对象实例;
S250:利用创建的新对象实例执行反射调用,向服务调用方返回执行结果;
S260:将执行结果封装为内呼响应对象,并且发送给服务调用方。
在本实施例中,服务发起方/调用方会传入包名、类名、方法名、方法参数信息。服务提供方接受到请求后,会获取到包名、类名、方法名、方法参数的信息,然后根据这些传入的数据,利用反射机制调用该方法,执行完成后将执行结果返回给服务发起方。
在一些实施例中,该方法还包括如下步骤:如果JavaBean名称不为空,则从Spirng容器获取对象实例;利用从Spirng容器获取的对象实例执行反射调用,向服务调用方返回执行结果;将执行结果封装为内呼响应对象,并且发送给服务调用方。
在一些实施例中,服务发起方或调用方在发起调用前,对相关参数进行序列化;服务提供方接收到请求后,对相关参数进行反序列化。
本发明实施例采用注解方式实现上述功能。具体来说,就是在框架中自定义注解SpecCall。利用拦截器去对该注解进行封装,当执行某方法时,如果包含SpecCall注解,则执行拦截器中的逻辑。拦截器的实现逻辑如下:从配置文件中获取对该方法的注册描述,包括包名、类名、方法名以及调用的模块名称,如果调用的模块名称为本模块,则直接在本地调用该方法;如果调用的模块名称为其他模块,则通过内呼调用其他模块的对应方法。内呼使用Gson格式进行对象的序列化和反序列化。对于内呼调用的处理逻辑进行了统一封装,每个模块都需要注册一个相应的内呼服务提供方交易,它们的处理逻辑相同,只是注册的交易码不同。公共内呼的处理逻辑如下:根据传入的包名、类名、方法名信息获取需要执行哪个方法,再根据传入的参数,通过反射执行该方法,最后将执行结果返回给服务请求方,即服务调用方。在一些实施方式中,服务发起方在发起调用前,可以对相关参数进行序列化;服务提供方接收到请求后,可以对相关参数进行反序列化。
上述java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。
上述服务调用涉及服务提供方和服务调用方。服务提供方对外提供某个交易的具体服务,服务调用方会对服务提供方进行调用。
上述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
具体过程概括性地描述如下:
1.对应用系统进行模块拆分,模块通过包名前缀进行区分。
2.在maven pom.xml文件中根据profile对各个模块设置相关属性,需要引入moduleName属性来定义模块名称。
Maven是一个项目管理工具,基于项目对象模型(POM)概念,可以对Java项目进行构建和依赖管理。使用maven profile特性可以解决不同环境的部署问题。本发明实施例正是基于maven profile机制来实现同一应用分模块打包部署的。
3.在innercall-service.properties配置文件中定义属性。
Figure BDA0002753432910000091
其中,${moduleName}通过项目打包时由对应profile传入。
另外,还需在该配置文件中定义如下属性:
Figure BDA0002753432910000101
需要在配置文件对应用的所有模块的内呼交易均进行配置。
该配置文件中的内容会在项目启动时加载到内存中。
4.对各个模块的内呼交易进行服务注册。
5.对服务消费方或服务调用方进行注册,示例如下:
Figure BDA0002753432910000102
其中,左侧key为包名+类名+方法名,右侧value为模块名+“,”+javaBean名称。
6.对相关方法添加SpecCall注解。
7.按模块打包部署项目。
请参阅图5,以下对上述概括性描述的处理过程进行更加详细的描述:
以下处理步骤由服务调用方执行:
S1:加入SpecCall注解,可选地,本步骤可以在代码中需要被调用的方法上加入SpecCall注解。SepcCall可以是单独一个注解,不包含参数,这种情况会根据当前的包名、类名和方法名,从配置文件中获取需要调用的目标模块。作为另一种情况,也可以包含moduleName参数,形如“(moduleName=“11”)”,其中11为模块名称,这样就会直接从注解中获取模块名称,而不必从配置文件中读取。第一种方式的优点是可支持热启动,系统上线后可在不关闭应用的情况下进行调整;第二种方式的优点是减少了配置的冗余,在代码中直接配置较为简洁。
S2:调用SpecCall统一拦截器。首先在使用时需要在被调用的方法上加SpecCall注解。这个注解执行的逻辑是通过SpecCall统一拦截器来实现的,S2-S7步骤可以理解为这个SpecCall统一拦截器的具体实现逻辑。在本实施例中,只要加了注解,相关的包名、类名、方法名及参数就会传入SpecCall统一拦截器,这是Java提供的一种机制。
S3:获取传入的包名、类名、方法名及参数。本步骤中,只有知道具体的被调用方法,相关的类名、方法名和包名都可以自动获取到(Java本身支持)。参数指的是Java方法中的参数。具体地,服务发起方(服务调用方)将包名、类名、方法名、方法参数传入,发起内呼,服务提供方接收到这些传入的数据后,才可以根据传入的包名、类名、方法名、方法参数,利用反射机制去调用这个方法,最后再将结果返回给服务发起方。
S4:获取本模块名称。可选地,本步骤可以从pom.xml文件的对应profiel中的moduleName.current属性中可以获取本模块名称。
S5:从服务消费方配置文件中根据包名、类名、方法名获取待调用的模块及JavaBean。服务调用涉及服务提供方和服务调用方。服务提供方对外提供某个交易的具体服务,服务调用方会对服务提供方进行调用。服务消费方也叫服务调用方。
JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。
S6:判断被调用的方法对应模块名称是否与本模块名称相同,如果相同,则执行步骤S7,如果不相同,则执行步骤S8。上述要被调用的方法对应模块在S5步骤中进行了介绍。
S7:执行本地方法,返回结果。
S8:获取目标模块的内呼服务交易码,封装内呼请求信息,发起内呼。S6中的本模块是服务调用方所在的模块,目标模块是服务提供方所在的模块。
上述内呼请求信息包括报文头和报文体。其中,报文头包括交易码、交易版本、全局流水号、时间戳、安全节点号等信息,报文体包括COM域和实体域,实体域为详细的请求或相应信息。
以下处理步骤由服务提供方执行:
S9:根据内呼请求传入的参数获取包名、类名、方法名及JavaBean名称。内呼请求传入的参数有几项内容,本身就包括包名、类名、方法名、JavaBean这些信息。
S10:判断JavaBean名称是否为空。如果是,则执行步骤S11,如果否,执行步骤S12。
S11:创建新的对象实例。具体地,Java中创建对象实例直接通过new来进行创建。步骤S11之后执地步骤S13。
S12:从Spirng容器获取对象实例。具体地,通常调用各层级对象的时候,需要不断创建对象,一次访问就需要创建两个对象;如果本发明实施例使用Spring容器,将不同层级的对象放入容器中,每次使用的时候调用容器中的对象,就不用创建那么多对象,达到节约内存空间的目的。简单来讲,Spring容器就是存储JavaBean对象的容器。获取完后,需要发给服务调用方。
S13:执行反射调用,向服务调用方返回执行结果。具体地,先有具体的对象实例,才可以在该对象实例上进行反射调用。反射调用需要利用新创建的对象实例或从Spring容器中获取的对象实例。
S14:将执行结果封装为内呼响应对象,并且发送给服务调用方。
以下处理步骤由服务调用方执行:
S15:对上述内呼响应对象进行解封装,获取方法最终执行结果。响应对象是指服务提供方将方法的执行结果封装成一个对象,该对象包括具体的返回数据信息和返回结果(成功或失败)。解封装是获取其中的返回数据信息。
以上是应用开发方涉及到的改造。可以发现,这种优化服务拆分及部署的方法对原有应用系统的侵入性较小,只需通过配置文件、注解以及对应环境打包便可以实现应用的分布式拆分和部署,可大大降低服务拆分改造的工作量和复杂度。
之所以可以实现便捷高效的拆分,是因为框架对注解拦截逻辑和公共内呼提供方的逻辑进行了统一封装。加入SpecCall的注解均会执行注解拦截器逻辑;服务提供方接收到服务调用方发来的请求后,均会执行内呼服务公共处理逻辑。
本发明实施例提供的上述技术方案的优点包括:
本发明实施例针对内部系统和外部系统的调用,使用不同的序列化和反序列化方式,既保证了外部调用时的平台无关性,又提升了内部调用的性能;
本发明实施例进行分布式改造时,对原有系统的侵入性较小,只需通过配置文件及注解方式便可实现模块的拆分和独立部署。
本发明实施例的上述技术方案的优点包括:
与上述相似专利比,本发明实施例采用同步方式进行RPC调用,同时根据内部系统还是外部系统决定采用内呼还是外呼,提升了性能。本发明实施例还在对原有应用系统侵入较少的情况下实现了应用的分布式改造和部署,通过配置决定调用采用内呼方式还是本地调用方式。
如图6所示,本发明实施例还提供了一种计算机可读存储介质300,计算机可读存储介质300内存储有计算机程序310,计算机程序310被处理器执行时实现如下步骤:
获取配置文件;根据配置文件确定对待调用方法进行本地调用或者内呼调用。
在一些实施例中,存储介质还被设置为存储用于执行以下步骤的程序代码:
从所述配置文件中获取对所述待调用方法的注册描述信息;其中,所述注册描述信息包括:待调用的模块名称;
如果所述待调用的模块名称为本模块名称,则直接在本地调用所述待调用方法;其中,所述本模块是服务调用方所在的模块;
如果所述待调用的模块名称为所述本模块名称以外的目标模块名称,则通过内呼调用来调用所述目标模块名称的对应方法;其中,所述目标模块是服务提供方所在的模块。
在一些实施例中,存储介质还被设置为存储用于执行以下步骤的程序代码:
为待调用方法加入SpecCall注解;调用SpecCall统一拦截器;根据所述待调用方法,获取包名、类名和方法名;获取本模块名称。
在一些实施例中,存储介质还被设置为存储用于执行以下步骤的程序代码:根据包名、类名和方法名获取待调用的模块。
在一些实施例中,存储介质还被设置为存储用于执行以下步骤的程序代码:获取所述目标模块的内呼服务交易码,封装内呼请求信息,发起内呼。
在一些实施例中,存储介质还被设置为存储用于执行以下步骤的程序代码:从pom.xml文件的对应profiel标签中的moduleName.current属性中获取本模块名称。
在一些实施例中,存储介质还被设置为存储用于执行以下步骤的程序代码:在获取所述目标模块的内呼服务交易码,封装内呼请求信息,发起内呼之后,还包括:对服务提供方发送的内呼响应对象进行解封装,获取最终执行结果;其中,所述内呼响应对象包括:返回数据信息和用于指示成功或失败的返回结果;所述解封装是获取返回数据信息。
在另一实施例中,计算机程序310被处理器执行时实现如下步骤:
接收内呼请求;
根据内呼请求传入的参数获取包名、类名、方法名及JavaBean名称;
判断JavaBean名称是否为空;
如果所述JavaBean名称为空,则创建新的对象实例;
利用创建的新对象实例执行反射调用,向服务调用方返回执行结果;
将所述执行结果封装为内呼响应对象,并且发送给服务调用方。
在一些实施例中,存储介质还被设置为存储用于执行以下步骤的程序代码:
如果所述JavaBean名称不为空,则从Spirng容器获取对象实例;
利用从Spirng容器获取的对象实例执行反射调用,向服务调用方返回执行结果;
将所述执行结果封装为内呼响应对象,并且发送给服务调用方。
所述计算机可读存储介质可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方式的媒体加以存储。本实施例所述的计算机可读存储介质有可以包括:利用电能方式存储信息的装置如,各式存储器,如RAM、ROM等;利用磁能方式存储信息的装置如,硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的装置如,CD或DVD。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。
本发明实施例还提供了一种电子设备,如图7所示,其包括一个或多个处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信。
存储器,用于存放计算机程序;
一个或多个处理器,用于执行存储器上所存放的程序时,实现如下步骤:
获取配置文件;
根据配置文件确定对待调用方法进行本地调用或者内呼调用。
在另一实施例中,一个或多个处理器,用于执行存储器上所存放的程序时,实现如下步骤:
接收内呼请求;
根据内呼请求传入的参数获取包名、类名、方法名及JavaBean名称;
判断JavaBean名称是否为空;
如果所述JavaBean名称为空,则创建新的对象实例;
利用创建的新对象实例执行反射调用,向服务调用方返回执行结果;
将所述执行结果封装为内呼响应对象,并且发送给服务调用方。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field ProgrammableGateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera HardwareDescriptionLanguage)、Confluence、CUPL(Cornell University ProgrammingLanguage)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (12)

1.一种优化交易远程过程调用的方法,其特征在于,包括:
获取配置文件;
根据配置文件确定对待调用方法进行本地调用或者内呼调用。
2.根据权利要求1所述的方法,其特征在于,所述根据配置文件确定对待调用方法进行本地调用或者内呼调用,具体包括:
从所述配置文件中获取对所述待调用方法的注册描述信息;其中,所述注册描述信息包括:待调用的模块名称;
如果所述待调用的模块名称为本模块名称,则直接在本地调用所述待调用方法;其中,所述本模块是服务调用方所在的模块;
如果所述待调用的模块名称为所述本模块名称以外的目标模块名称,则通过内呼调用来调用所述目标模块名称的对应方法;其中,所述目标模块是服务提供方所在的模块。
3.根据权利要求2所述的方法,其特征在于,在所述获取配置文件之前,还包括:
为待调用方法加入SpecCall注解;
调用SpecCall统一拦截器;
根据所述待调用方法,获取包名、类名和方法名;
获取本模块名称。
4.根据权利要求3所述的方法,其特征在于,还包括:根据包名、类名和方法名获取待调用的模块名称。
5.根据权利要求2所述的方法,其特征在于,所述通过内呼调用来调用所述目标模块名称的对应方法,具体包括:
获取所述目标模块的内呼服务交易码,封装内呼请求信息,发起内呼。
6.根据权利要求5所述的方法,其特征在于,所述内呼请求信息包括报文头和报文体;其中,所述报文头包括:交易码、交易版本、全局流水号、时间戳、以及安全节点号;所述报文体包括COM域和实体域,所述实体域为详细的请求信息。
7.根据权利要求3所述的方法,其特征在于,所述获取本模块名称,具体包括:
从pom.xml文件的对应profiel标签中的moduleName.current属性中获取本模块名称。
8.根据权利要求5或6所述的方法,其特征在于,在获取所述目标模块的内呼服务交易码,封装内呼请求信息,发起内呼之后,还包括:
对服务提供方发送的内呼响应对象进行解封装,获取最终执行结果;其中,所述内呼响应对象包括:返回数据信息和用于指示成功或失败的返回结果;所述解封装是获取返回数据信息。
9.一种优化交易远程过程调用的方法,其特征在于,包括:
接收内呼请求;
根据内呼请求传入的参数获取包名、类名、方法名及JavaBean名称;
判断JavaBean名称是否为空;
如果所述JavaBean名称为空,则创建新的对象实例;
利用创建的新对象实例执行反射调用,向服务调用方返回执行结果;
将所述执行结果封装为内呼响应对象,并且发送给服务调用方。
10.根据权利要求9所述的方法,其特征在于,还包括:
如果所述JavaBean名称不为空,则从Spirng容器获取对象实例;
利用从Spirng容器获取的对象实例执行反射调用,向服务调用方返回执行结果;
将所述执行结果封装为内呼响应对象,并且发送给服务调用方。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-10中任意一项所述的优化交易远程过程调用的方法。
12.一种电子设备,其特征在于,其包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-10中任一所述的优化交易远程过程调用的方法。
CN202011193621.8A 2020-10-30 2020-10-30 一种优化交易远程过程调用的方法、介质和电子设备 Pending CN112256455A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011193621.8A CN112256455A (zh) 2020-10-30 2020-10-30 一种优化交易远程过程调用的方法、介质和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011193621.8A CN112256455A (zh) 2020-10-30 2020-10-30 一种优化交易远程过程调用的方法、介质和电子设备

Publications (1)

Publication Number Publication Date
CN112256455A true CN112256455A (zh) 2021-01-22

Family

ID=74267938

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011193621.8A Pending CN112256455A (zh) 2020-10-30 2020-10-30 一种优化交易远程过程调用的方法、介质和电子设备

Country Status (1)

Country Link
CN (1) CN112256455A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114219643A (zh) * 2021-12-22 2022-03-22 中国农业银行股份有限公司 一种交易调用方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040050463A (ko) * 2002-12-10 2004-06-16 한국전자통신연구원 엔터프라이즈 자바 빈 컴포넌트 테스팅 장치 및 그 방법
US7617504B1 (en) * 2002-09-12 2009-11-10 Sprint Communications Company L.P. Computer method and system for integrating enterprise JavaBeans into non-Java environments
CN110287040A (zh) * 2019-06-26 2019-09-27 苏宁消费金融有限公司 一种远程调用服务框架的实现系统
CN111767144A (zh) * 2020-06-24 2020-10-13 中国工商银行股份有限公司 交易数据的交易路由确定方法、装置、设备及系统
CN111767143A (zh) * 2020-06-24 2020-10-13 中国工商银行股份有限公司 交易数据处理方法、装置、设备及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7617504B1 (en) * 2002-09-12 2009-11-10 Sprint Communications Company L.P. Computer method and system for integrating enterprise JavaBeans into non-Java environments
KR20040050463A (ko) * 2002-12-10 2004-06-16 한국전자통신연구원 엔터프라이즈 자바 빈 컴포넌트 테스팅 장치 및 그 방법
CN110287040A (zh) * 2019-06-26 2019-09-27 苏宁消费金融有限公司 一种远程调用服务框架的实现系统
CN111767144A (zh) * 2020-06-24 2020-10-13 中国工商银行股份有限公司 交易数据的交易路由确定方法、装置、设备及系统
CN111767143A (zh) * 2020-06-24 2020-10-13 中国工商银行股份有限公司 交易数据处理方法、装置、设备及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
于勐, 臧婉瑜, 谢立, 孙钟秀, 过敏意: "面向对象语言并行化中的调用局部化优化", 计算机学报, no. 04, 12 April 2002 (2002-04-12) *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114219643A (zh) * 2021-12-22 2022-03-22 中国农业银行股份有限公司 一种交易调用方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
US5787251A (en) Method and apparatus for subcontracts in distributed processing systems
US7533388B1 (en) Method and apparatus for dynamic Stubs and Ties in RMI-IIOP
US10140119B2 (en) Modular serialization
US20120158794A1 (en) Techniques to discover object interfaces
WO2022148390A1 (zh) 一种在区块链中部署、更新、调用智能合约的方法
US11635992B2 (en) Object-oriented memory for client-to-client communications
US9304762B2 (en) Automatically customizing a computer-executable application at runtime
CN111768303A (zh) 交易处理方法、装置、设备及系统
CN111045746B (zh) 代码扩展方法和框架
CN112925523B (zh) 对象比较方法、装置、设备及计算机可读介质
CN112256455A (zh) 一种优化交易远程过程调用的方法、介质和电子设备
CN112286594B (zh) 对象序列化和反序列化方法及设备、电子设备和介质
CN116541336B (zh) 多核芯片、协处理器的软件运行方法
US8201185B2 (en) COM object and managed code object interoperability
CN110874321A (zh) 测试接口的远程调用方法、调用封装引擎及远程代理引擎
CN113835904A (zh) 一种远程过程调用控制方法、装置、设备及存储介质
CN113296898A (zh) 异步任务处理方法、装置、电子设备和存储介质
CN114138507B (zh) Python程序服务化方法、装置及计算机可读存储介质
CN117667080B (zh) 一种sca组件依赖信息的确定方法、装置、设备及介质
Bharti et al. A Scalable Design Approach for State Propagation in Serverless Workflow
CN117891830A (zh) 一种基于存储过程的脚本扩展方法
WO2020215425A1 (zh) 一种软件运行方法、系统、计算设备及存储介质
CN117785511A (zh) 功能数据处理的方法及装置、存储介质及电子设备
CN113300812A (zh) 一种业务接口报文处理方法及装置
CN116954723A (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