发明内容
本发明的目的是克服了上述现有技术中的缺点,提供一种通过异步IO操作、并采用线程池管理和响应超时管理,能有效保证调用的高效性和稳定性,且结构简单,应用范围广泛的企业分布式应用间实现非阻塞方式相互调用的系统及方法。
为了实现上述的目的,本发明的企业分布式应用间实现非阻塞方式相互调用的系统具有如下构成:
NIO读写模块,用以进行基于java.nio数据包的数据读写操作;
线程池管理模块,连接所述的NIO读写模块,用以维护一线程池;
数据打解包模块,连接所述的NIO读写模块,用以对数据进行打包和解包;
请求处理模块,连接所述的NIO读写模块并连接所述的外部系统,用以根据所获得至请求向所述的NIO读写模块发送读写指令;以及
响应回调管理模块,连接所述的线程池管理模块和数据打解包模块,用以实现对请求的相应回调。
在企业分布式应用间实现非阻塞方式相互调用的系统中,所述的NIO读写模块具体包括异步I/O API单元、事件模型单元和Codec框架单元,所述的异步I/O API单元分别连接所述的事件模型单元和Codec框架单元,所述的事件模型单元还连接所述的Codec框架单元。
在企业分布式应用间实现非阻塞方式相互调用的系统中,所述的事件模型单元为基于拦截链模式的事件模型单元。
本发明还提供一种基于权利要求1所述的实现企业分布式应用间实现非阻塞方式相互调用的方法,该方法包括以下步骤:
(1)所述的请求处理模块启动轮询监听连接请求的反应器,等待客户端发起连接请求;
(2)客户端发起连接请求时,所述的轮询监听连接请求的反应器监听到该连接请求,所述的请求处理模块建立和客户端的连接,并将所建立的连接注册到一个轮询监听连接读写请求的反应器上;
(3)客户端发出数据,被所述的轮询监听连接读写请求的反应器监听到;
(4)所述的NIO读写模块读取数据;
(5)所述的数据打解包模块获得所读取的数据并将数据解包为业务请求进行处理;
(6)业务请求被处理后,响应回调管理模块获得处理结果,并将其发送至所述的数据打解包模块;
(7)所述的数据打解包模块进行数据打包;
(8)所述的数据打解包模块将打包数据发送至所述的NIO读写模块;
(9)所述的NIO读写模块将数据写入客户端。
在企业分布式应用间实现非阻塞方式相互调用的方法中,所述的NIO读写模块具体包括:异步I/O API单元、事件模型单元和Codec框架单元,所述的异步I/O API单元分别连接所述的事件模型单元和Codec框架单元,所述的事件模型单元还连接所述的Codec框架单元,所述的步骤NIO读写模块读取数据,具体为:所述的异步I/O API单元对已读取的数据进行缓存,并根据缓存内容对尚未读取的数据进行读取。
在企业分布式应用间实现非阻塞方式相互调用的方法中,该方法中所述的数据打解包模块获得所读取的数据并将数据解包为业务请求进行处理,具体为:所述的数据打解包模块对所读取数据依照设定的数据格式进行解包。
在企业分布式应用间实现非阻塞方式相互调用的方法中,该方法中所述的数据打解包模块进行数据打包,具体为:所述的数据打解包模块对所写入的数据依照设定的数据格式进行打包。
在企业分布式应用间实现非阻塞方式相互调用的方法中,该方法中所述的NIO读写模块将数据写入客户端,包括以下步骤:
(1)所述的NIO读写模块将数据写入客户端;
(2)在数据未写入完成时,所述的事件模型单元注册一个包含未写入数据的写事件。
在企业分布式应用间实现非阻塞方式相互调用的方法中,该方法所述的线程池管理模块执行一超时管理线程,当该线程池管理模块所执行的超时管理线程发现有处理时间超时的请求时,线程池管理模块生成超时异常并发送至所述的响应回调管理模块。
在企业分布式应用间实现非阻塞方式相互调用的方法中,该方法中所述数据打解包模块进行数据打包,具体为:数据打解包模块根据设定的异常数据格式对异常信息进行数据打包。
采用了该发明的在企业分布式应用间实现非阻塞方式相互调用的系统及方法,其系统包括NIO读写模块、线程池管理、数据打解包、请求处理、响应回调管理操作五个核心部分,其通过有效地保护系统资源,实现不受外部因素的干扰,从而保证当前系统自身的稳定运行。本发明在企业分布式应用间实现非阻塞方式相互调用的系统及方法,其工作性能稳定可靠,适用范围较为广泛。
具体实施方式
为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。
请参阅图1所示,为本发明的在企业分布式应用间实现非阻塞方式相互调用的系统中所采用的NIO处理逻辑示意图。
在一种实施方式中,企业分布式应用间相互调用的系统包括:
NIO读写模块,用以进行基于java.nio数据包的数据读写操作;
线程池管理模块,连接所述的NIO读写模块,用以维护一线程池;
数据打解包模块,连接所述的NIO读写模块,用以对数据进行打包和解包;
请求处理模块,连接所述的NIO读写模块并连接所述的外部系统,用以根据所获得至请求向所述的NIO读写模块发送读写指令;以及
响应回调管理模块,连接所述的线程池管理模块和数据打解包模块,用以实现对请求的相应回调。
其中,所述的NIO读写模块具体包括异步I/O API单元、事件模型单元和Codec框架单元,所述的异步I/O API单元分别连接所述的事件模型单元和Codec框架单元,所述的事件模型单元还连接所述的Codec框架单元。且所述的事件模型单元为基于拦截链模式的事件模型单元。
基于该实施方式的在企业分布式应用间实现非阻塞方式相互调用的方法具体包括以下步骤:
(1)所述的请求处理模块启动轮询监听连接请求的反应器,等待客户端发起连接请求;
(2)客户端发起连接请求时,所述的轮询监听连接请求的反应器监听到该连接请求,所述的请求处理模块建立和客户端的连接,并将所建立的连接注册到一个轮询监听连接读写请求的反应器上;
(3)客户端发出数据,被所述的轮询监听连接读写请求的反应器监听到;
(4)所述的NIO读写模块读取数据;
(5)所述的数据打解包模块获得所读取的数据并将数据解包为业务请求进行处理;
(6)业务请求被处理后,响应回调管理模块获得处理结果,并将其发送至所述的数据打解包模块;
(7)所述的数据打解包模块进行数据打包;
(8)所述的数据打解包模块将打包数据发送至所述的NIO读写模块;
(9)所述的NIO读写模块将数据写入客户端。
在一较优选的实施方式中,所述的NIO读写模块读取数据的步骤,具体为:所述的异步I/O API单元对已读取的数据进行缓存,并根据缓存内容对尚未读取的数据进行读取。
在进一步优选的实施方式中,该方法中所述的数据打解包模块获得所读取的数据并将数据解包为业务请求进行处理,具体为:所述的数据打解包模块对所读取数据依照设定的数据格式进行解包。该方法中所述的数据打解包模块进行数据打包,具体为:所述的数据打解包模块对所写入的数据依照设定的数据格式进行打包。
在更进一步优选的实施方式中,该方法中所述的NIO读写模块将数据写入客户端,包括以下步骤:
(91)所述的NIO读写模块将数据写入客户端;
(92)在数据未写入完成时,所述的事件模型单元注册一个包含未写入数据的写事件。
(93)所述的线程池管理模块执行一超时管理线程,当该线程池管理模块所执行的超时管理线程发现有处理时间超时的请求时,线程池管理模块生成超时异常并发送至所述的响应回调管理模块。
在更优选的实施方式中,该方法中所述数据打解包模块进行数据打包,具体为:数据打解包模块根据设定的异常数据格式对异常信息进行数据打包。
在本发明的应用中,本发明的在企业分布式应用间实现非阻塞方式相互调用的方法中可以包括以下步骤:
(1)启动轮询监听连接请求的反应器,等待客户端发起连接请求;
(2)客户端发起连接请求,被步骤(1)中启动的反应器监听到,而后建立和客户端的连接,并把建立的连接注册到一个轮询监听连接读写请求的反应器上;
(3)客户端发出数据,被步骤(2)中启动的反应器监听到,读取数据,然后将读取出来的数据经过解包变成业务请求,交由处理器处理;
(31)读取数据时,由于TCP是按照流的方式读取,而不是按照包的方式读取,这样有可能有造成一次无法完整读取数据的情况,这时需要NIO框架有数据读取缓冲的能力,再下一次再收到数据时可以和上一次收到的不完整的数据一起交给用户处理;
(32)读取数据时可以按照双方指定的数据格式来解包,如前4位表示报文总长度,接下来的5位表示需要调用的服务名称,剩下的数据表示调用参数;
(4)业务请求被处理器处理后,会交由响应回调将业务响应写会客户端,在向客户端写数据前会执行数据打包,而后发送;
(41)写入数据时,如果由于网络原因无法立即一次写入时,可以尝试有些次数的循环,如果还为写完,可以重新注册一个写事件,等待下次轮循时触发该事件,继续写入未写完的数据;
(42)写入数据时可以按照双方指定的数据格式来打包,如前4位表示报文总长度,剩下的数据表示返回结果;
(43)在业务请求的处理过程中,会有后台线程的超时管理器在执行,会检查每个业务请求的已处理的时间,当发现有处理时间超时的请求时,会生成超时异常交由响应回调处理;
(44)写入数据时还需要考虑异常信息的打包,如前4位表示报文总长度,接下来可有1个标志位标识是否有异常,接下来5位表示异常编码,剩下的数据表示异常信息。在实际应用中,本发明的NIO读写功能对连接的请求和数据的读写均采用异步处理,并且设置独立的线程池使用,因此不会占用业务处理的线程。在收到请求数据后会将请求数据交由打解包模块处理变成具体的业务请求,这个业务请求就会由请求处理器处理,请求处理器完成请求处理后调用响应回调将业务响应通过NIO写出。各个类的方法如下表所示:
表1各类方法列表
请求处理的序列图如图2所示:
(1)启动轮询监听连接请求的反应器,等待客户端发起连接请求。
(2)客户端发起连接请求,被步骤(1)中启动的反应器监听到,而后建立连接,并把建立的连接注册到一个轮询监听连接读写请求的反应器上。
(3)客户端发出数据,被步骤(2)中启动的反应器监听到,读取数据,然后将读取出来的数据经过解包变成业务请求,交由处理器处理。
(4)处理器处理完请求后,交由响应回调将业务响应写会客户端,在向客户端写数据前会执行数据打包,而后发送。
本发明的方法中,主要的代码实现用伪代码给出如下:
其中,接收客户端连接请求伪代码如下:
读写工作器伪代码如下:
超时资源管理器伪代码如下:
本发明的技术方案具有以下优点:
(1)网络IO的异步处理
通过JavaNIO的使用,实现基于IO事件的IO异步处理。
(2)线程管理
可以保证线程数不会随着大并发的请求访问而无限制的变大,保证系统资源的合理分配使用,对于暂时无法处理的请求,可以放入请求队列。
(3)超时管理
对于长时间没有处理完成的业务请求,超时管理会自动抛出一个超时异常交由响应回调处理。
采用了该发明的在企业分布式应用间实现非阻塞方式相互调用系统及方法,其系统包括NIO读写模块、线程池管理、数据打解包、请求处理、响应回调管理操作五个核心部分,其通过有效地保护系统资源,实现不受外部因素的干扰,从而保证当前系统自身的稳定运行。本发明的计算机系统中实现企业分布式应用间实现非阻塞方式相互调用系统及方法,其工作性能稳定可靠,适用范围较为广泛。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。