CN115794372A - 一种跨语言应用系统间通信的方法、系统 - Google Patents
一种跨语言应用系统间通信的方法、系统 Download PDFInfo
- Publication number
- CN115794372A CN115794372A CN202211197681.6A CN202211197681A CN115794372A CN 115794372 A CN115794372 A CN 115794372A CN 202211197681 A CN202211197681 A CN 202211197681A CN 115794372 A CN115794372 A CN 115794372A
- Authority
- CN
- China
- Prior art keywords
- communication middleware
- interface
- language
- communication
- request
- 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
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本申请提供一种跨语言应用系统间通信的方法、系统,用于第一语言应用系统和第二语言应用系统之间的通信,所述方法包括:创建基于.NET框架的通信中间件;通过所述通信中间件的组件与所述第一语言应用系统编译后的动态链接库结合,使所述通信中间件与所述第一语言应用系统进行交互通信;通过所述第二语言应用系统基于http协议与所述通信中间件进行交互通信。通过基于.NET搭建跨语言系统的桥梁即通信中间件,让两个系统间进行交互更加安全灵活;使系统间的交互更加安全并且降低了系统间的偶合度。
Description
技术领域
本发明涉及计算机软件领域,具体涉及一种跨语言应用系统间通信的方法、系统。
背景技术
基于JAVA语言开发的应用系统,和基于C++语言开发的客户端系统之间的通信过程比较复杂,虽然可以使用目前现有技术JNI实现两系统间的交互通信,但是对于JAVA语言而言使用JNI技术与C++系统交互的话,会使JAVA程序就丧失了它自身平台的两个优点:1、程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。2、程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。因此给两个不同语言系统的交互产生了难题。
发明内容
本申请旨在提供一种跨语言应用系统间通信的方法、系统,通过基于.NET搭建跨语言系统的桥梁即通信中间件,让两个系统间进行交互更加安全灵活;使系统间的交互更加安全并且降低了系统间的偶合度。
根据本申请的一方面,提出一种跨语言应用系统间通信的方法,用于第一语言应用系统和第二语言应用系统之间的通信,所述方法包括:
创建基于.NET框架的通信中间件;
通过所述通信中间件的组件与所述第一语言应用系统编译后的动态链接库结合,使所述基于.NET框架的通信中间件与所述第一语言应用系统进行交互通信;
通过所述第二语言应用系统基于http协议与所述通信中间件进行交互通信。
根据一些实施例,所述方法包括:
所述创建基于.NET框架的通信中间件,包括:
构建通信中间件项目分层结构,所述分层结构包括控制层、应用服务层、核心层、引用层、实体定义层、属性定义层和库文件层;
所述控制层为接收外部请求入口,所述应用服务层用于对流入或流出数据进行逻辑处理业务逻辑,所述核心层包括核心工具类以及框架组件,所述引用层用于引入对方接口相关头文件以及核心工具类,实体定义层用于定义数据传输对象实体类,所述属性定义层用于定义与配置相关的属性文件,所述库文件层用于引入对方接口的动态和静态的库文件。
根据一些实施例,所述方法包括:
按需求引入所述第一语言应用系统已编译好的相关的动态库文件和对外公开的包含第一语言函数接口方法的头文件,所述头文件包括第一头文件、第二头文件和第三头文件,所述第一头文件包含所涉及到的接口以及创建连接的定义类,所述第二头文件定义接口中所涉及的数据类型,所述第三头文件定义接口中所涉及的数据结构。
根据一些实施例,所述方法包括:
构建所述通信中间件的核心层组件,其中包括定时任务队列处理组件、系统健康性能监察组件;
通过所述定时任务队列处理组件中的定时任务组件将接收到的服务请求以队列任务的方式进行异步处理;
通过所述系统健康性能监察组件实时监控通信中间件中相关模块的工作状态情况,包括应用服务器工作状态、数据库状态、tcp连接状态、作业队列状态。
根据一些实施例,所述方法包括:所述创建基于.NET框架的通信中间件,包括:
构建核心层组件,用于与所述第一语言应用系统连接、登录认证,以及当所述通信中间件重启时通过所述核心层组件对所述通信中间件进行初始化操作;
根据一些实施例,所述方法包括:所述创建基于.NET框架的通信中间件,还包括:
构建所述控制层文件,包括定义引用控制类,用于接收外部系统服务请求,当收到外部系统服务请求后将数据进行逻辑处理并封装成具有唯一请求标识的请求数据包,然后将每个所述请求数据包通过所述唯一请求标识作为主键存入数据库中,将相应的服务请求的服务接口名传向基于队列的所述定时任务组件的任务中进行异步执行。
根据一些实施例,所述方法包括:所述创建基于.NET框架的通信中间件,还包括:
构建配置信息类,用于当通信中间件启动时将必要的信息加载到内存中;
通过所述配置信息类直接读取到配置文件中所有配置信息,所述配置信息包括通信中间件状态指标、作业队列、对方服务器地址、账户、密码、超时时间设置以及日志打印存放路径。
根据一些实施例,所述方法包括:所述创建基于.NET框架的通信中间件,还包括:
通过所述核心层组件在加载时读取所述配置信息类中相关配置信息,并对所述通信中间件进行初始化操作,所述初始化操作包括与所述第一语言应用系统的网络通信检查、创建tcp连接、登录、身份认证以及接口响应回调的事件注册。
根据一些实施例,所述方法包括:所述创建基于.NET框架的通信中间件,还包括:
构建监控类,所述监控类用于以可视化的形式监控通信中间件状态,以及通过该类和所述.NET框架相关的核心库文件的所述系统健康性能监察组件实现以界面化实时监控通信中间件的健康状态,包括数据缓存服务器工作状态、作业队列的执行状态、协议tcp的连接状态、接口服务的执行状态。
根据一些实施例,所述方法还包括:
构建仪表盘监控界面入口类,通过该类将仪表盘监控的内容整合,对通信中间件中作业队列执行情况以界面的方式显示,以实时查看通信中间件接口服务执行状态。
根据本申请的另一方面,提供一种用于跨语言应用系统间通信的系统,包括第一语言应用系统、第二语言应用系统和通信中间件,
所述第二语言应用系统向所述通信中间件发出http请求;
所述通信中间件接收所述请求信息,并进行逻辑处理后放入作业调度队列中,通过队列以异步的方式完成作业;
所述通信中间件将所述作业调度队列中的作业逐个通过tcp协议的方式与所述第一语言系统进行交互;
所述通信中间件通过事件监听的方式来接收所述第一语言应用系统的消息或响应,收到所述消息或响应后进行逻辑处理,再以http请求的方式响应给所述第二语言应用系统;
所述通信中间件对接收到的所述第二语言应用系统的请求在各阶段的执行状态进行实时监控;
对所述通信中间件的各组件的工作状态进行实时监控,包括数据缓存服务器工作状态、作业队列的执行状态、协议tcp的连接状态、接口服务的执行状态。
根据本申请的另一方面,提供一种电子设备,包括:
存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法中任一项所述的方法。
根据本申请的另一方面,提供一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被处理器执行时实现上述方法中任一项所述的方法。
根据本申请示例实施例,通过基于.NET搭建跨语言系统的桥梁即通信中间件,让两个系统间进行交互更加安全灵活;使系统间的交互更加安全并且降低了系统间的偶合度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1示出根据本申请示例实施例的跨语言应用系统间通信的方法流程图。
图2示出根据本申请示例实施例的跨语言应用系统间通信的系统的框图。
图3示出根据本申请示例实施例的跨语言应用系统间通信的交互图。
图4示出根据本申请示例实施例的跨语言应用系统间通信的界面示意图。
图5示出根据本申请另一示例实施例的跨语言应用系统间通信的界面示意图。
图6示出根据一示例性实施例的一种电子设备的框图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本申请将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
应理解,虽然本文中可能使用术语第一、第二、第三等来描述各种组件,但这些组件不应受这些术语限制。这些术语乃用以区分一组件与另一组件。因此,下文论述的第一组件可称为第二组件而不偏离本申请概念的教示。如本文中所使用,术语“及/或”包括相关联的列出项目中的任一个及一或多者的所有组合。
本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本申请所必须的,因此不能用于限制本申请的保护范围。
基于JAVA语言开发的应用系统,和基于C++语言开发的客户端系统之间的通信过程比较复杂,虽然可以使用目前现有技术JNI实现两系统间的交互通信,但是对于JAVA语言而言使用JNI技术与C++系统交互的话,会使JAVA程序就丧失了它自身平台的两个优点:1、程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。2、程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。
鉴于此,发明人提出基于.NET的中间件搭建上述两种不同语言系统的桥梁即通信中间件,不但解决了上述难题而且让两个系统间进行交互更加安全灵活;使系统间的交互更加安全并且降低了系统间的偶合度。
使用.NET语言开发通信中间件不仅充分利用.NET的跨语言、跨平台、安全、以及对开放互联网标准和协议的支持的优点,而且利用其成熟的组件可以快速搭建出一款界面操作性强的管理软件。
利用.NET的核心库(Core库)与C++编译后的DLL动态链接库的高效结合,即可使基于.NET框架开发的中间件(前置机)与基于C++的应用系统进行安全可靠的交互通信;然后基于其它语言的应用系统通过http协议与中间件(前置机)与进行交互通信;这样既解决了跨语言系统间的交互难的瓶颈问题,同时又降低了系统间的偶合度;通过一款相对独立的中间件不仅可以兼容更多的跨语言系统间的交互通信而且对后续的维护和扩展提供了极大的便利,为日常开发提供了很好的解决方案。
以下结合附图对本申请的示例实施例进行说明。
图1示出根据本申请示例实施例的跨语言应用系统间通信的方法流程图。
参见图1,在S101,创建基于.NET框架的通信中间件。
根据一些实施例,可使用开发工具Visual Studio 2019创建基于.NET 5.0框架的通信中间件项目,命名为shgt-trade-futures,并配置相关的启动、构建、剖署等环境变量。
根据一些实施例,构建通信中间件项目分层结构,分层结构包括控制层、应用服务层、核心层、引用层、实体定义层、属性定义层和库文件层。
控制层为接收外部请求入口,应用服务层用于对流入或流出数据进行逻辑处理业务逻辑,核心层包括核心工具类以及框架组件,引用层用于引入对方接口相关头文件以及核心工具类,实体定义层用于定义数据传输对象实体类,属性定义层用于定义与配置相关的属性文件,库文件层用于引入对方接口的动态和静态的库文件。
例如,构建项目架构分层结构,分别定义为controller、appService、core、qouteApi、generated、property、lib等七层结构;其中controller层主要用于接收外部请求入口层,appService层主要对流入或流出数据的进行逻辑处理业务逻辑层,core层主要是一些核心工具类以及框架组件,qouteApi层将引入对方接口相关头文件以及核心工具类,generated层主要是用于定义一些dto实体类,property层主要是定义一些与配置相关的属性文件,lib层主要是引入对方接口的动态和静态的库文件等。
在S103,通过.NET的核心层组件与所述第一语言应用系统编译后的动态链接库结合,使所述基于.NET框架的通信中间件与所述第一语言应用系统进行交互通信。
根据一些实施例,按需求引入第一语言应用系统已编译好的相关的动态库文件和对外公开的包含第一语言函数接口方法的头文件,头文件包括第一头文件、第二头文件和第三头文件,第一头文件包含所涉及到的接口以及创建连接的定义类,第二头文件定义接口中所涉及的数据类型,第三头文件定义接口中所涉及的数据结构。
根据一些实施例,引入.NET框架相关的核心层组件,其中包括定时任务队列处理组件、系统健康性能监察组件;通过定时任务队列处理组件中的定时任务组件将接收到的服务请求以队列任务的方式进行异步处理;通过系统健康性能监察组件实时监控通信中间件中相关模块的工作状态情况,包括应用服务器工作状态、数据库状态、tcp连接状态、作业队列状态。
例如,按需求引入对方C++系统已编译好的相关的动态库文件ctquoteapi.dll,对外公开的C++函数接口方法的头文件CTFtdcQuoteApi.h、CTFtdcUserApiDataType.h、CTFtdcUserApiStruct.h等,其中CTFtdcQuoteApi文件为所涉及到的接口以及创建连接的定义类,CTFtdcUserApiDataType头文件定义了接口中所涉及的数据类型,CTFtdcUserApiStruct文件定义了接口中所涉及的数据结构;
例如,构建核心类组件,其中包括有定时任务队列处理组件Hangfire、系统健康监察组件HealthChecks等;通过Hangfire中的BackgroundJob定时任务组件将接收到的服务请求以队列任务的方式进行异步处理,从而可以减轻高并发情况下访问通信中间件的处理压力;通过健康性能监控组件HealthChecks可以实时监控通信中间件中的一些相关模块的工作状态情况,例如应用服务器工作状态、redis数据库状态、tcp连接状态、qoute作业队列状态等。
根据一些实施例,构建与对方C++应用服务器连接、登录认证的核心层组件QuoteApiServer,当通信中间件重启时通过该类对通信中间件进行一系列的初始化操作;该类在加载时会读取相关配置信息并开始对通信中间件进行初始化工作,包括与对方服务器网络通信检查、创建tcp连接、登录、身份认证以及接口响应回调的事件注册等。
根据一些实施例,构建通信中间件接收外部服务请求入口层文件,在controller层定义类QuoteApisController用来接收外部系统post请求,当收到外部服务请求后将数据进行逻辑处理并封装成具有第8)步中产生的唯一请求id的请求数据包,然后将每个请求入参数据包通过唯一请求requestId作为主键存入redis数据库中,将相应的请求的服务接口名传向基于队列BackgroundJob的任务中进行异步执行。
根据一些实施例,构建通信中间件中涉及到的一些相关配置信息类,当通信中间件启动时需要将一些必要的信息事先加载到内存中;DefaultConfigurationProvider、QuoteApiServerConfiguration,通过该QuoteApiServerConfiguration类可直接读取到配置文件appsettings.xxx.json中所有配置信息,包括通信中间件状态指标、作业队列、对方服务器地址、账户、密码、超时时间设置以及日志打印存放路径等等;接着通过类DefaultConfigurationProvider与QuoteApiServerConfiguration对配置信息进行包装后供通信中间件使用。
根据一些实施例,构建创建唯一序列id类DefaultRequestId,该类利用redis数据库增量方法来创建唯一id序列号,由于redis数据库生成的增量序列是按时间顺序机制生成的并且提供了外部接口,所以可直接调用其现有方法生成唯一序号并结合业务场景可以封装成相应的工具类。从而为通信中间件中的接口服务请求以及数据库缓存提供唯一标识键,方便在后续的服务请求中的问题跟踪以及数据缓存处理。
在S105,通过所述第二语言应用系统基于http协议与所述通信中间件进行交互通信。
这里第二语言系统可以是Java语言开发的系统,也可以是其他语言的系统。
根据一些实施例,构建通信中间件的控制层文件,包括定义引用控制类,用于接收外部系统(即第二语言应用系统)服务请求,当收到外部系统服务请求后将数据进行逻辑处理并封装成具有唯一请求标识的请求数据包,然后将每个所述请求数据包通过所述唯一请求标识作为主键存入数据库中,将相应的服务请求的服务接口名传向基于队列的所述定时任务组件的任务中进行异步执行。
基于.NET的中间件来搭建上述两种不同语言系统的桥梁即通信中间件,实现跨系统,跨网络协议http/tcp通信中间件,在异构系统之间实现跨应用跨语言访问,让两个系统间进行交互更加安全灵活,使系统间的交互更加安全并且降低了系统间的偶合度。使用.NET语言开发通信中间件不仅充分利用.NET的跨语言、跨平台、安全、以及对开放互联网标准和协议的支持的优点而且利用其成熟的组件可以快速搭建出界面操作性强的管理软件。
以下为具体的进一步基于.NET组件搭建通信中间件的步骤。
步骤1:编写通信中间件接收外部服务请求入口层文件,在controller层定义类QuoteApisController用来接收外部系统post请求,当收到外部服务请求后将数据进行逻辑处理并封装成具有唯一请求id的请求数据包,然后将每个请求入参数据包通过唯一请求id作为主键存入redis数据库中,将相应的请求的服务接口名传向基于队列BackgroundJob的任务中进行异步执行。
步骤2:编写接收到上一步骤中任务列队BackgroundJob执行调度的相应的后台队列调度服务接口类QuoteJobService,在该类定义接口中所有业务操作的队列方法,并在相应方法中实现业务逻辑处理后调用对方应用系统中对应的接口;该类是在controller层接收到外部请求或者是在QuoteApiCallback类接收到对方应用系统的响应或消息通知后通过任务调度组件BackgroundJob根据方法名来执行对应队列的方法来完成对应的逻辑功能。
步骤3:编写调用对方应用系统服务请求接口的桥接类QuoteApiReqHandler,通过该请求工具类将各种业务场景的有关请求的接口封装成一个通用请求封装类;作为桥接类不仅可以解决了不同接口服务间的兼容性问题同时还可以降低代码的偶合度便于后续的维护与扩展。
步骤4:编写接收对方接口响应和监听被推送的消息的桥接类QuoteApiRspHandler,通过该响应工具类将各种业务场景的有关响应接口和监听消息的事件封装一个通用响应监听包装类;同样作为桥接类不仅可以解决了不同接口服务间的兼容性问题同时还可以降低代码的偶合度便于后续的维护与扩展。
步骤5:编写通信中间件响应回调代理接口类IQuoteCallbackApis,当通信中间件通过第6步骤或7步骤中接收到对方服务接口(C++应用)的响应或者对方服务器(C++应用)推送的消息后,通过第4步的响应工具类通过任务作业调度组件BackgroundJob调度业务逻辑处理类QuoteJobService中对应的方法,然后再通过该回调类以post请求的方式回调调用方服务系统(Java应用)的接口;按照单一设计模式来完成数据流整个流程,既保证了数据的安全性又降低了代码间偶合性,方便软件后续的管理、扩展、维护等操作。
步骤6:编写监听对方(C++应用)与业务相关的接口响应以及消息推送事件注册类QuoteApiBusinessCallback,通过该类将对方(C++应用)基类的中的有关业务接口的回调事件进行重写并监听,当接收到响应或消息事件后触发第4步骤中的相应方法,以切面编程的设计模式对接收事件前后执行一系列相应的业务逻辑操作更加灵活。
步骤7:编写监听通信中间件与服务器相关的接口事件注册类QuoteApiServerCallback,通过该类将对方(C++应用)基类中与应用服务器相关一些操作响应或事件进行重写或监听,如登录认证,退出登录以及与对方(C++应用)服务器创建的连接信息等,从而方便对通信中间件与对方(C++应用)服务器的连接状态和通信状态进行实时跟踪。
步骤8:编写回调事件自定义类IquoteApiCallbackEvents,通过该类将通信中间件与对方应用系统中所涉及的事件进行自定义,用于注册事件监听和接收对方(C++应用)服务推送的消息,在系统设计中通过自定议事件类可根据业务场景对各种消息事件以及接口服务响应回调的进行定制化处理。
步骤9:编写非托管资源显式释放组件类IquoteApiComponent,通过该组件类可对通信中间件一的些非托管资源在特殊情况下进行手动释放处理操作;该类主要涉及范围为服务器配置相关文件信息QuoteApiServerConfiguration、通信中间件上下文会话信息SessionContext、通信中间件请求发送Api(CCTFtdcQuoteApi)、通信中间件请求响应Api(CCTFtdcQuoteSpi)等;当通信中间件中某个进程发生异常时即可通过该组件的手动操作进行事件处理。
步骤10:编写以可视化的形式监控通信中间件状态的监控类FuturesExtensions,通过该静态类来借助.net的核心工具类HealthChecks实现以界面化实时监控前置服务器的健康状态;如数据缓存服务器redis工作状态、作业队列hangfire的执行状态、协议tcp的连接状态、接口服务quote-server的执行状态等。
步骤11:编写Hangfire仪表盘登录身份认证校验授权类BasicAuthAuthorizationFilter,该校验类通过继承.net core的核心层组件IdashboardAuthorizationFilter来对接口服务请求状态的仪表盘跟踪器Hangfire进行登录身份认证校验和授权等操作,该类方便了通信中间件中接口服务请求状态监控的仪表组件权限控制。
步骤12:编写Hangfire仪表盘身份证认证和资源权限的相关类BasicAuthAuthorizationUser,BasicAuthAuthorizationFilterOptions通过这几个类与第11步中的校验授权类进行配合下,来完成通信中间件中所有接口服务请求或响应以及任务队列的调度情况的Hangfire仪表盘跟踪器的登录认证功能。
步骤13:编写session定义类SessionContext,通过该类定义session上下状态参数,包括Disconnected、Connected、Authenticated、Login等,为托管托资源以及服务器状态管理提供便捷。
步骤14:编写常量定义类Constants,在该常量类中定义一些请求应答以及消息推送的redis数据库的key值和一些话述描述的常量值,用于数据传输中缓存存取、日志信息打印以及返回结果描述等。
步骤15:编写日志打印接口IloggerService,通过该类对日志接口Ilogger进行实现自定义封装,为通信中间件中业务功能类的日志信息打印以及问题的跟踪提供便利。
步骤16:编写数据格式化工具类JsonHelper,通过该工具类对一些接口的出入参数据进行序列化和反序列化等操作,为整个通信中间件中的数据格式处理提供了便利条件。
步骤17:编写接口以及通信中间件组件报错信息的统一提示工具类ValidateModelAttribute,该类继承了全局过滤器ActionFilterAttribute类对各种报错信息进行统一处理后包装成约定的返回状态信息,便于调用方根据接口的返回状态信息进行逻辑判断。
步骤18:定义所有接口服务涉及的出入参实体包Generated,在该包中定义各接口出入参数据的实体类,遵循软件设计架构体系层次结构,便于代码维护管理。
步骤19:编写Hangfire Dashboard界面入口类Program,通过该类将整个HangfireDashboard仪表盘监控的内容整合起来,对通信中间件中作业队列执行情况以界面的方式呈现于开发人员,从而可实时查看通信中间件接口服务执行状态。
步骤20:编写日志、登录认证以及服务地址相关配置文件分别为development、stagting、production三种环境的配置文件,包括通信中间件实时状态监控配置、日志打印级别以及输出路径、服务器连接地址、认证账号等;对一些信息通过配置文件形式保存使得维护更加灵活并且方便托管。
步骤21:编写项目打包以及发布所需相关文件,其中install.bat用来安装发布通信中间件、startup.cs用来启动通信中间件并初始化相关配置类、unintall.bat用来卸载通信中间件;
步骤22:编写通信中间件请求和接收数据包监控文件FuturesExtensions,可以通过管理界面实时监控Hangfire作业任务调度信息;该功能主要包当前含有的总队列数、计划执行、正在执行、已完成、已失败、等待中的各种状态的队列数;
步骤23:编写控制通信中间件中所有接口服务的辅助启动类Bootstrap,通过该类可以对接口服务进行整体控制,可以对QuoteApiServer核心服务组件,QuoteApisController中的所有服务进行开启或暂停、删除等操作。
步骤24:待程序测试验证通过后导出对应的安装包shgt-trade-futures.exe,将安装包部署在事先准备好的服务器上并开通相应的出入站策略后,外部的应用系统可以通过http协议与通信中间件进行通信,通信中间件通过内部逻辑处理后调用C++应用系统相关的服务接口,解决了两种不同语言系统时的交互难问题。
当应用系统发起调用以及回调操作后,开发人员都可以通过Hangfire仪表盘进行实时监控跟踪服务请求的状态信息以及回调服务的响应信息并且开发人员可以手动对失败接口服务进行重试操作。
Hangfire Dashboard仪表监控管理层在界面布局上以及涉及的监控范围有待进一步优化,从而可以更加全面实时监控整个通信中间件的工作状态以及便于管理。
本申请方法充分利用软件的设计模式以及原则,可以使用设计模式中的适配器模式和装饰器模式等设计模式兼容更多语言的接口并对软件后续的扩展维护做准备;尽可能地利用.NET框架中的一些比较成熟组件库,来加强整个系统在使用过程中的高效性、可靠性。
图2示出根据本申请示例实施例的跨语言应用系统间通信的系统的框图。
图3示出根据本申请示例实施例的跨语言应用系统间通信的交互图。
跨语言应用系统间通信的系统,包括第一语言应用系统210、第二语言应用系统220和通信中间件230。
利用跨语言应用系统间通信的系统进行通讯主要包括以下流程:
1)外部系统的前端应用(外部系统可为Java系统或其他编程语言系统)对通信前置机服务(即通信中间件)发出http请求,通信中间件开放为restful服务,充分利用.NET框架的跨语言、跨平台、安全、以及对开放互联网标准和协议的支持的优点。
2)对步骤1)接收的请求信息进行逻辑处理放入作业调度队列中,通过队列以异步的方式完成作业;这样做不仅可减小服务器高并发压力同时对系统的执行性能有所提升。
3)将步骤2)中作业队列逐个通过tcp协议的方式与对方系统的服务端应用(这里对方系统是C++开发的系统)进行交互,使用tcp带状态的协议可以保证数据传输的安全性、稳定性。
4)通信中间件通过事件监听的方式来接收到对方系统的消息或响应,收到消息后进行逻辑处理后再以http请求的方式响应给外部系统的前端应用。
接收到外部系统的每个请求在各阶段的执行状态,开发人员可以通过图4中仪表盘进行实时监控。
对步骤4)中存在的失败请求可通过反馈信息追查原因,在条件允许的情况下可以进行手动重试操作。
开发人员可以通过图4和图5所示的界面对通信中间件的各组件的工作状态进行实时监控,如数据缓存服务器redis工作状态、作业队列hangfire的执行状态、协议tcp的连接状态、接口服务quote-server的执行状态等。其中,图4示出根据本申请示例实施例的跨语言应用系统间通信的界面示意图;图5(a)和图5(b)示出根据本申请另一示例实施例的跨语言应用系统间通信的界面示意图。
通过上述功能可以保证一个服务请求在整个交互过程中的透明性、稳定性。
本发明解决了跨语言应用系统间交互通信的瓶颈问题,在通信时开发人员可以对系统间的传递信息进行实时监控并可进行人工干预操作。
应清楚地理解,本申请描述了如何形成和使用特定示例,但本申请不限于这些示例的任何细节。相反,基于本申请公开的内容的教导,这些原理能够应用于许多其它实施例。
本领域技术人员可以理解实现上述实施例的全部或部分步骤被实现为由CPU执行的计算机程序。在该计算机程序被CPU执行时,执行本申请提供的上述方法所限定的上述功能的程序可以存储于一种计算机可读存储介质中,该存储介质可以是只读存储器,磁盘或光盘等。
此外,需要注意的是,上述附图仅是根据本申请示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
通过对示例实施例的描述,本领域技术人员易于理解,根据本申请实施例的跨语言应用系统间通信的方法至少具有以下优点中的一个或多个。
根据示例实施例,通过基于.NET搭建跨语言系统的桥梁即通信中间件,让两个系统间进行交互更加安全灵活;使系统间的交互更加安全并且降低了系统间的偶合度。
图6示出根据一示例性实施例的一种电子设备的框图。
下面参照图6来描述根据本申请的这种实施方式的电子设备200。图6显示的电子设备200仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,电子设备200以通用计算设备的形式表现。电子设备200的组件可以包括但不限于:至少一个处理单元210、至少一个存储单元220、连接不同系统组件(包括存储单元220和处理单元210)的总线230、显示单元240等。
其中,存储单元存储有程序代码,程序代码可以被处理单元210执行,使得处理单元210执行本说明书描述的根据本申请各种示例性实施方式的方法。
存储单元220可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)2201和/或高速缓存存储单元2202,还可以进一步包括只读存储单元(ROM)2203。
存储单元220还可以包括具有一组(至少一个)程序模块2205的程序/实用工具2204,这样的程序模块2205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线230可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备200也可以与一个或多个外部设备300(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备200交互的设备通信,和/或与使得该电子设备200能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口250进行。并且,电子设备200还可以通过网络适配器260与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。网络适配器260可以通过总线230与电子设备200的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、或者网络设备等)执行根据本申请实施方式的上述方法。
软件产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本领域技术人员可以理解上述各模块可以按照实施例的描述分布于装置中,也可以进行相应变化唯一不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上具体地示出和描述了本申请的示例性实施例。应可理解的是,本申请不限于这里描述的详细结构、设置方式或实现方法;相反,本申请意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
Claims (12)
1.一种跨语言应用系统间通信的方法,用于第一语言应用系统和第二语言应用系统之间的通信,其特征在于,所述方法包括:
创建基于.NET框架的通信中间件;
通过所述通信中间件的组件与所述第一语言应用系统的动态链接库结合,使所述基于.NET框架的通信中间件与所述第一语言应用系统进行交互通信;
通过所述第二语言应用系统基于http协议与所述通信中间件进行交互通信。
2.根据权利要求1所述的方法,其特征在于,所述创建基于.NET框架的通信中间件,包括:
构建通信中间件项目分层结构,所述分层结构包括控制层、应用服务层、核心层、引用层、实体定义层、属性定义层和库文件层;
所述控制层为接收外部请求入口,所述应用服务层用于对流入或流出数据进行逻辑处理业务逻辑,所述核心层包括核心工具类以及框架组件,所述引用层用于引入对方接口相关头文件以及核心工具类,实体定义层用于定义数据传输对象实体类,所述属性定义层用于定义与配置相关的属性文件,所述库文件层用于引入对方接口的动态和静态的库文件。
3.根据权利要求1所述的方法,其特征在于,
按需求引入所述第一语言应用系统已编译好的相关的动态库文件和对外公开的包含第一语言函数接口方法的头文件,所述头文件包括第一头文件、第二头文件和第三头文件,所述第一头文件包含所涉及到的接口以及创建连接的定义类,所述第二头文件定义接口中所涉及的数据类型,所述第三头文件定义接口中所涉及的数据结构。
4.根据权利要求2所述的方法,其特征在于,所述创建基于.NET框架的通信中间件,包括:
构建所述通信中间件的核心层组件,其中包括定时任务队列处理组件、系统健康性能监察组件;
通过所述定时任务队列处理组件中的定时任务组件将接收到的服务请求以队列任务的方式进行异步处理;
通过所述系统健康性能监察组件实时监控通信中间件中相关模块的工作状态情况,包括应用服务器工作状态、数据库状态、tcp连接状态、作业队列状态。
5.根据权利要求4所述的方法,其特征在于,所述创建基于.NET框架的通信中间件,还包括:
构建所述通信中间件的核心层组件,用于与所述第一语言应用系统连接、登录认证,以及当所述通信中间件重启时通过所述核心层组件对所述通信中间件进行初始化操作。
6.根据权利要求5所述的方法,其特征在于,所述创建基于.NET框架的通信中间件,还包括:
构建所述通信中间件的所述控制层文件,包括定义引用控制类,用于接收外部系统服务请求,当收到外部系统服务请求后将数据进行逻辑处理并封装成具有唯一请求标识的请求数据包,然后将每个所述请求数据包通过所述唯一请求标识作为主键存入数据库中,将相应的服务请求的服务接口名传向基于队列的所述定时任务组件的任务中进行异步执行。
7.根据权利要求6所述的方法,其特征在于,所述创建基于.NET框架的通信中间件,还包括:
构建所述通信中间件的配置信息类,用于当通信中间件启动时将必要的信息加载到内存中;
通过所述配置信息类直接读取到配置文件中所有配置信息,所述配置信息包括通信中间件状态指标、作业队列、对方服务器地址、账户、密码、超时时间设置以及日志打印存放路径。
8.根据权利要求7所述的方法,其特征在于,所述创建基于.NET框架的通信中间件,还包括:
通过所述核心层组件在加载时读取所述配置信息类中相关配置信息,并对所述通信中间件进行初始化操作,所述初始化操作包括与所述第一语言应用系统的网络通信检查、创建tcp连接、登录、身份认证以及接口响应回调的事件注册。
9.根据权利要求8所述的方法,其特征在于,所述创建基于.NET框架的通信中间件,还包括:
构建所述通信中间件的监控类,所述监控类用于以可视化的形式监控通信中间件状态,以及通过该类和所述.NET框架相关的核心库文件的所述系统健康性能监察组件实现以界面化实时监控通信中间件的健康状态,包括数据缓存服务器工作状态、作业队列的执行状态、协议tcp的连接状态、接口服务的执行状态。
10.根据权利要求9所述的方法,其特征在于,所述创建基于.NET框架的通信中间件,还包括:
构建所述通信中间件的仪表盘监控界面入口类,通过该类将仪表盘监控的内容整合,对通信中间件中作业队列执行情况以界面的方式显示,以实时查看通信中间件接口服务执行状态。
11.一种用于跨语言应用系统间通信的系统,包括第一语言应用系统、第二语言应用系统和通信中间件,其特征在于,
所述第二语言应用系统向所述通信中间件发出http请求;
所述通信中间件接收所述请求信息,并进行逻辑处理后放入作业调度队列中,通过队列以异步的方式完成作业;
所述通信中间件将所述作业调度队列中的作业逐个通过tcp协议的方式与所述第一语言系统进行交互;
所述通信中间件通过事件监听的方式来接收所述第一语言应用系统的消息或响应,收到所述消息或响应后进行逻辑处理,再以http请求的方式响应给所述第二语言应用系统;
所述通信中间件对接收到的所述第二语言应用系统的请求在各阶段的执行状态进行实时监控;
对所述通信中间件的各组件的工作状态进行实时监控,包括数据缓存服务器工作状态、作业队列的执行状态、协议tcp的连接状态、接口服务的执行状态。
12.一种计算机程序产品,包括计算程序或指令,其特征在于,该计算机程序或指令被处理器执行时实现如权利要求1-10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211197681.6A CN115794372A (zh) | 2022-09-29 | 2022-09-29 | 一种跨语言应用系统间通信的方法、系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211197681.6A CN115794372A (zh) | 2022-09-29 | 2022-09-29 | 一种跨语言应用系统间通信的方法、系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115794372A true CN115794372A (zh) | 2023-03-14 |
Family
ID=85432367
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211197681.6A Pending CN115794372A (zh) | 2022-09-29 | 2022-09-29 | 一种跨语言应用系统间通信的方法、系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115794372A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116594792A (zh) * | 2023-05-25 | 2023-08-15 | 上海贝锐信息科技股份有限公司 | 一种跨语言sdk系统、方法、设备及可读介质 |
-
2022
- 2022-09-29 CN CN202211197681.6A patent/CN115794372A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116594792A (zh) * | 2023-05-25 | 2023-08-15 | 上海贝锐信息科技股份有限公司 | 一种跨语言sdk系统、方法、设备及可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7774762B2 (en) | System including run-time software to enable a software application to execute on an incompatible computer platform | |
US7725888B2 (en) | Systems and methods for dynamically linking application software into a running operating system kernel | |
US5893106A (en) | Object oriented server process framework with interdependent-object creation | |
US6434598B1 (en) | Object-oriented system, method and article of manufacture for a client-server graphical user interface (#9) framework in an interprise computing framework system | |
US6871223B2 (en) | System and method for agent reporting in to server | |
US6424991B1 (en) | Object-oriented system, method and article of manufacture for a client-server communication framework | |
US7020699B2 (en) | Test result analyzer in a distributed processing framework system and methods for implementing the same | |
CN112130871B (zh) | 远程部署中间件的方法、装置、计算机设备及存储介质 | |
US7130881B2 (en) | Remote execution model for distributed application launch and control | |
US10795646B2 (en) | Methods and systems that generate proxy objects that provide an interface to third-party executables | |
US6272555B1 (en) | Object-oriented system, method and article of manufacture for a client-server-centric interprise computing framework system | |
EP0592080A2 (en) | Method and apparatus for interprocess communication in a multicomputer system | |
US20060271911A1 (en) | Generating executable objects implementing methods for an information model | |
US20170364844A1 (en) | Automated-application-release-management subsystem that supports insertion of advice-based crosscutting functionality into pipelines | |
US20180136970A1 (en) | Methods and systems for configuration-file inheritance | |
US20230401058A1 (en) | Semantic functional wrappers of services | |
US20070061277A1 (en) | Method, system, and storage medium for providing dynamic deployment of grid services over a computer network | |
US7353514B1 (en) | Computer software method for administering batch jobs | |
CN115794372A (zh) | 一种跨语言应用系统间通信的方法、系统 | |
Pour | COMPONENT TECHNOLOGIES | |
Moreira et al. | Supporting adaptable distributed systems with FORMAware | |
CN113835723A (zh) | 一种用于车辆电子控制单元的片上系统、升级系统及方法 | |
US7257613B2 (en) | Methods to develop remote applications with built in feedback ability for use in a distributed test framework | |
CN109254856A (zh) | 智能pos服务端提供接口给客户端的方法 | |
CN115454539A (zh) | Uwp应用扩展外设调用方法、系统及介质 |
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 |