CN110134534B - 基于nio针对大数据分布式***进行消息处理优化的***及方法 - Google Patents
基于nio针对大数据分布式***进行消息处理优化的***及方法 Download PDFInfo
- Publication number
- CN110134534B CN110134534B CN201910411724.8A CN201910411724A CN110134534B CN 110134534 B CN110134534 B CN 110134534B CN 201910411724 A CN201910411724 A CN 201910411724A CN 110134534 B CN110134534 B CN 110134534B
- Authority
- CN
- China
- Prior art keywords
- message
- processing
- module
- information
- service
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及一种基于NIO针对大数据分布式***进行消息处理优化的***,包括消息产生模块;消息分发模块;消息发送模块;消息接收模块;消息处理模块,根据接收的消息中的业务信息进行相应的业务操作;消息返回处理模块,用于等待消息的处理结果。本发明还涉及一种基于NIO针对大数据分布式***进行消息处理优化控制的方法。采用了本发明的基于NIO针对大数据分布式***进行消息处理优化的***及方法,能够有效的降低分布式***间消息通信时的资源占用高的问题,在提高消息通信的效率的同时保证了消息通信的及时性,且***的通用性强,架构灵活,可扩展性高。该发明采用的方法很好的满足目前分布式***间大批量和高并发消息通信的需求,具有广泛的应用范围。
Description
技术领域
本发明涉及计算机应用领域,尤其涉及大数据处理领域,具体是指一种基于NIO针对大数据分布式***进行消息处理优化的***及方法。
背景技术
随着互联网发展,需要处理的数据量越来越大,传统的单体应用架构已经难以满足现阶段互联网的发展需求,当今的互联网应用普遍采用基于网络的分布式架构。通过对服务的拆分降低不同业务模块之间的耦合度,不同模块以独立的方式部署,模块与模块之间通过网络的方式进行交互,从而提高***处理性能、可靠性和可扩展性。对于高访问量、高并发的***,基于网络的分布式应用架构成为了必然选择。
传统的单体软件架构只部署在一台机器上,如图1所示,不同模块间的交互都是通过本地的方法调用完成,数据的传送都是在内存上进行的,开销比较小,延迟比较低。相对于单体应用架构,基于网络的分布式应用架构给我们带来了许多的好处,但与此同时也带来了新的问题。在基于网络的分布式架构中,一个业务操作可能需要多个不同模块的交互完成,不同模块之间的交互需要跨越网络,如图2所示。基于网络的应用架构在提高***处理性能、可靠性和可扩展性的同时也带来了如下的问题:提高了应用业务处理的延时;增加了***在处理网络连接方面的资源开销;不同模块之间存在大批量的数据传输可能造成网络的拥堵。
在传统的方式中,由于需要保证业务上的操作是正确的,模块间是以同步的方式进行通信的,需要等待对方的返回结果来判断调用是否成功,从而执行下一步的操作或是进行失败回滚。同步处理的调用时序图如图3所示,从同步调用的时序图可以看出,在等待调用远程服务的方法的过程中,调用者需要等待请求的返回才可进行下一步操作,调用方法的过程中,线程调用者的线程进入阻塞状态,直到服务器返回调用结果后才可重新进入运行状态。虽让线程进入阻塞状态不运行,但***还是需要保持调用者线程的信息,这需要占用***的资源。
在大数据的背景下,分布式***业务模块之间的交互非常频繁,***间消息通信的规模大、并发度高,若为模块间每个消息通信的网络请求生成一个线程,频繁的线程创建及销毁操作将会占用服务器的大量资源,影响服务器的性能。虽然可以用线程池技术消除线程创建及销毁操作,但线程池的容量是有限的,当线程池中的线程都在等待远程调用结果的返回时,后面的请求都在等待获取线程池里的线程,此时可能造成***的处理线程都阻塞在网络IO上,CPU资源的利用率不高,影响***的处理性能,这种问题在调用的远程操作比较复杂,耗费的时间比较长时尤为明显。
从以上的推论可以看出,在基于网络的大数据分布式架构的应用中,传统方法下的基于同步方式进行的***间消息传输时存在上述的缺陷。
发明内容
本发明的目的是克服了上述现有技术的缺点,提供了一种资源利用率高、处理性能好、操作简便的基于NIO针对大数据分布式***进行消息处理优化的***及方法。
为了实现上述目的,本发明的基于NIO针对大数据分布式***进行消息处理优化的***及方法如下:
该基于NIO针对大数据分布式***进行消息处理优化的***,其主要特点是,所述的***包括:
消息产生模块,用于生成业务消息并将业务消息对象加入到消息发送队列;
消息分发模块,与所述的消息产生模块相连接,用于对消息进行合并和格式转换;
消息发送模块,与所述的消息分发模块相连接,用于将业务消息对象转换成可在网络上传输的格式,并使用非阻塞的方式发送消息;
消息接收模块,与所述的消息发送模块相连接,用于将消息交由后续模块进行处理,并在处理后将处理的结果信息返回给消息发送模块;
消息处理模块,与所述的消息接收模块相连接,用于对消息进行处理,根据接收的消息中的业务信息进行相应的业务操作,并生成操作的结果信息;
消息返回处理模块,与所述的消息处理模块相连接,用于等待消息的处理结果,并根据返回的处理结果进行相应的业务操作。
该基于上述***基于NIO针对大数据分布式***进行消息处理优化控制的方法,其主要特点是,所述的方法包括以下步骤:
(1)所述的消息产生模块解耦消息发送,产生消息并将消息封装成消息对象之后加入到消息发送队列中;
(2)所述的消息分发模块从消息发送队列中获取消息对象,并对消息对象进行合并和转换;
(3)所述的消息发送模块使用NIO组件,以非阻塞的方式通过网络发送给远程服务端;
(4)所述的消息接收模块处理消息发送方的发送请求,将消息报文信息重新封装成消息对象后交由消息处理模块处理;
(5)所述的消息处理模块获取到消息对象之后根据消息进行相关的业务处理并生成处理结果;
(6)所述的消息返回处理模块通过等待远程服务的处理结果,并根据返回消息的信息进行后续的业务处理。
较佳地,所述的步骤(1)具体包括以下步骤:
(1.1)所述的消息产生模块从业务处理的逻辑中生成消息,将消息封装成单独的消息对象;
(1.2)所述的消息产生模块将消息对象加入到消息的发送队列中,继续后续的业务处理或完成业务处理。
较佳地,所述的步骤(2)具体包括以下步骤:
(2.1)所述的消息分发模块从配置文件中获取消息分发服务线程的配置参数信息,并根据参数启动消息分发服务;
(2.2)所述的消息分发模块从消息队列中读取消息信息;
(2.3)所述的消息分发模块将消息对象加入到消息待处理列表中,判断消息待处理列表中的消息数量是否达到了配置的最大消息合并长度,如果是,则继续步骤(2.6);否则,继续(2.5);
(2.4)消息待处理列表不为空时,计算当前***的时间和最后一次进行消息批量处理时间的时间差,判断时间差是否大于或等于配置的带处理消息最长等待时间,如果是,则继续步骤(2.5);否则,继续步骤(2.2);
(2.5)达到最大合并消息数或最长等待时间时,提取带处理消息列表中的消息,生成新的待处理消息数组;
(2.6)所述的消息分发模块使用新的待处理消息数组构造新的消息发送处理线程,将消息发送现场加入到消息发送线程池中执行;
(2.7)所述的消息分发模块将原来列表中的带处理信息清空用于下次使用,更新最后一次处理待处理列表中的消息的时间为当前时间,继续步骤(2.2)。
较佳地,所述的步骤(2.2)具体包括以下步骤:
(2.2.1)判断当前队列是否有消息,如果是,则获取消息对象,继续步骤(2.3);否则,继续步骤(2.2.2);
(2.2.2)等待预设的时间,判断等待的时间范围内是否有新消息加入队列中,如果是,则获取消息对象或继续步骤(2.3);否则,继续步骤(2.4)。
较佳地,所述的步骤(3)具体包括以下步骤:
(3.1)所述的消息发送模块从配置文件中获取消息发送服务的配置参数,并根据配置启动消息发送的服务;
(3.2)所述的消息发送模块对消息对象数组进行转化,生成字符格式的消息报文;
(3.3)打开消息的发送通道,并将通道的阻塞方式配置为非阻塞;
(3.4)使用生成的报文消息生产报文的字节缓冲区,使用缓冲区的方式发送消息;
(3.5)所述的消息发送模块将报文字节缓冲区中的数据写入到通道中,直至所有数据写入到通道中,将通道的读取事件注册到IO多路复用选择器中。
较佳地,所述的步骤(4)具体包括以下步骤:
(4.1)所述的消息接收模块创建服务端的消息接收通道,将通道设置为非阻塞模式,并指定通道端口,从服务端通道中获取消息发送的请求链接;
(4.2)判断是否获取到新的请求的链接,如果是,则继续步骤(4.3);否则,重新执行步骤(4.2);
(4.3)所述的消息接收模块将获取到的消息请求通道的可读事件注册到服务端的IO多路复用选择器中,监听IO多路复用选择器中可读取事件,消息请求通道中数据传输完成后,通过上述的IO多路复用选择器获取该传输通道;
(4.4)所述的消息接收模块申请新的字节缓冲区,读取消息报文信息并转换成消息对象数组,生成业务处理任务,将消息处理任务列表使用线程池进行并发处理,指定执行业务允许的最长等待时间,生成一组消息处理的结果列表;
(4.5)所述的消息接收模块从所述的结果列表中获取业务的执行的结果,将执行结果进行拼接写入到返回的信息中,将处理结果信息转换成报文的形式,将报文返回给调用的客户端。
较佳地,所述的步骤(5)具体包括以下步骤:
(5.1)所述的消息处理模块从配置文件中获取消息处理服务配置参数信息并根据参数启动消息处理服务;
(5.2)所述的消息处理模块通过线程池以并发的方式处理每一个消息处理任务;
(5.3)所述的消息处理模块根据消息处理的结果生成消息处理结果信息,并返回给所述的消息接收模块。
较佳地,所述的步骤(6)具体包括以下步骤:
(6.1)所述的消息返回处理模块通过客户端的IO多路复用选择器选取已返回处理结果的传输通道;
(6.2)从传输通道中读取服务端返回的消息到缓冲区中,从缓冲区中获取返回的处理信息;
(6.3)解析返回的信息,根据返回信息中的原消息ID区分每个业务操作;
(6.4)判断息的返回结果是否包含错误信息,如果是,则根据需要重发消息进行重试或者根据消息ID对业务进行回滚操作;否则,根据消息的返回结果进行下一步的业务处理。
采用了本发明的基于NIO针对大数据分布式***进行消息处理优化的***及方法,解决了大数据量分布式***间消息通信时***资源占用过高和处理效率不高的问题,提出了一种基于NIO的大数据分布式***的消息处理优化方法,该技术方案由消息产生模块、消息的分发模块、消息发送模块、消息的接收模块、消息的处理模块和消息返回处理模块构成;采用了该消息优化处理方法的***,能够有效的降低分布式***间消息通信时的资源占用高的问题,在提高消息通信的效率的同时保证了消息通信的及时性,且***的通用性强,架构灵活,可扩展性高。该发明采用的方法很好的满足目前分布式***间大批量和高并发消息通信的需求,具有广泛的应用范围。
附图说明
图1为现有技术的单体软件架构图。
图2为现有技术的基于网络的分布式应用架构图。
图3为现有技术的分布式应用***间使用同步调用的时序图。
图4为本发明的基于NIO针对大数据分布式***进行消息处理优化控制的方法的非阻塞的IO多路复用服务调用时序图。
图5为本发明的基于NIO针对大数据分布式***进行消息处理优化控制的方法的消息处理流程图。
图6为本发明的基于NIO针对大数据分布式***进行消息处理优化控制的方法的消息分发模块的处理流程图。
具体实施方式
为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
本发明的该基于NIO针对大数据分布式***进行消息处理优化的***,其中包括:
消息产生模块,用于生成业务消息并将业务消息对象加入到消息发送队列;
消息分发模块,与所述的消息产生模块相连接,用于对消息进行合并和格式转换;
消息发送模块,与所述的消息分发模块相连接,用于将业务消息对象转换成可在网络上传输的格式,并使用非阻塞的方式发送消息;
消息接收模块,与所述的消息发送模块相连接,用于将消息交由后续模块进行处理,并在处理后将处理的结果信息返回给消息发送模块;
消息处理模块,与所述的消息接收模块相连接,用于对消息进行处理,根据接收的消息中的业务信息进行相应的业务操作,并生成操作的结果信息;
消息返回处理模块,与所述的消息处理模块相连接,用于等待消息的处理结果,并根据返回的处理结果进行相应的业务操作。
本发明的该基于上述***基于NIO针对大数据分布式***进行消息处理优化控制的方法,其中包括以下步骤:
(1)所述的消息产生模块解耦消息发送,产生消息并将消息封装成消息对象之后加入到消息发送队列中;
(1.1)所述的消息产生模块从业务处理的逻辑中生成消息,将消息封装成单独的消息对象;
(1.2)所述的消息产生模块将消息对象加入到消息的发送队列中,继续后续的业务处理或完成业务处理;
(2)所述的消息分发模块从消息发送队列中获取消息对象,并对消息对象进行合并和转换;
(2.1)所述的消息分发模块从配置文件中获取消息分发服务线程的配置参数信息,并根据参数启动消息分发服务;
(2.2)所述的消息分发模块从消息队列中读取消息信息;
(2.2.1)判断当前队列是否有消息,如果是,则获取消息对象,继续步骤(2.3);否则,继续步骤(2.2.2);
(2.2.2)等待预设的时间,判断等待的时间范围内是否有新消息加入队列中,
如果是,则获取消息对象或继续步骤(2.3);否则,继续步骤(2.4);
(2.3)所述的消息分发模块将消息对象加入到消息待处理列表中,判断消息待处理列表中的消息数量是否达到了配置的最大消息合并长度,如果是,则继续步骤(2.6);否则,继续(2.5);
(2.4)消息待处理列表不为空时,计算当前***的时间和最后一次进行消息批量处理时间的时间差,判断时间差是否大于或等于配置的带处理消息最长等待时间,如果是,则继续步骤(2.5);否则,继续步骤(2.2);
(2.5)达到最大合并消息数或最长等待时间时,提取带处理消息列表中的消息,生成新的待处理消息数组;
(2.6)所述的消息分发模块使用新的待处理消息数组构造新的消息发送处理线程,将消息发送现场加入到消息发送线程池中执行;
(2.7)所述的消息分发模块将原来列表中的带处理信息清空用于下次使用,更新最后一次处理待处理列表中的消息的时间为当前时间,继续步骤(2.2);
(3)所述的消息发送模块使用NIO组件,以非阻塞的方式通过网络发送给远程服务端;
(3.1)所述的消息发送模块从配置文件中获取消息发送服务的配置参数,并根据配置启动消息发送的服务;
(3.2)所述的消息发送模块对消息对象数组进行转化,生成字符格式的消息报文;
(3.3)打开消息的发送通道,并将通道的阻塞方式配置为非阻塞;
(3.4)使用生成的报文消息生产报文的字节缓冲区,使用缓冲区的方式发送消息;
(3.5)所述的消息发送模块将报文字节缓冲区中的数据写入到通道中,直至所有数据写入到通道中,将通道的读取事件注册到IO多路复用选择器中;
(4)所述的消息接收模块处理消息发送方的发送请求,将消息报文信息重新封装成消息对象后交由消息处理模块处理;
(4.1)所述的消息接收模块创建服务端的消息接收通道,将通道设置为非阻塞模式,并指定通道端口,从服务端通道中获取消息发送的请求链接;
(4.2)判断是否获取到新的请求的链接,如果是,则继续步骤(4.3);否则,重新执行步骤(4.2);
(4.3)所述的消息接收模块将获取到的消息请求通道的可读事件注册到服务端的IO多路复用选择器中,监听IO多路复用选择器中可读取事件,消息请求通道中数据传输完成后,通过上述的IO多路复用选择器获取该传输通道;
(4.4)所述的消息接收模块申请新的字节缓冲区,读取消息报文信息并转换成消息对象数组,生成业务处理任务,将消息处理任务列表使用线程池进行并发处理,指定执行业务允许的最长等待时间,生成一组消息处理的结果列表;
(4.5)所述的消息接收模块从所述的结果列表中获取业务的执行的结果,将执行结果进行拼接写入到返回的信息中,将处理结果信息转换成报文的形式,将报文返回给调用的客户端;
(5)所述的消息处理模块获取到消息对象之后根据消息进行相关的业务处理并生成处理结果;
(5.1)所述的消息处理模块从配置文件中获取消息处理服务配置参数信息并根据参数启动消息处理服务;
(5.2)所述的消息处理模块通过线程池以并发的方式处理每一个消息处理任务;
(5.3)所述的消息处理模块根据消息处理的结果生成消息处理结果信息,并返回给所述的消息接收模块;
(6)所述的消息返回处理模块通过等待远程服务的处理结果,并根据返回消息的信息进行后续的业务处理;
(6.1)所述的消息返回处理模块通过客户端的IO多路复用选择器选取已返回处理结果的传输通道;
(6.2)从传输通道中读取服务端返回的消息到缓冲区中,从缓冲区中获取返回的处理信息;
(6.3)解析返回的信息,根据返回信息中的原消息ID区分每个业务操作;
(6.4)判断息的返回结果是否包含错误信息,如果是,则根据需要重发消息进行重试或者根据消息ID对业务进行回滚操作;否则,根据消息的返回结果进行下一步的业务处理。
本发明的具体实施方式中,针对上述常用解决方案的不足之处,即针对分布式架构中各个模块之间通过网络相互通信时,由于高并发的网络请求造成的***资源占用过高、线程阻塞造成的***资源利用率不高进而影响***处理性能的问题。通过优化分布式架构中模块间通信时***资源占用和消除线程阻塞引起的资源利用率不高的问题提升分布式***的处理性能。
为了实现上述目的,基于NIO的大数据分布式***的消息处理优化方法使用了如下的技术方案:
(一)使用NIO的非阻塞的通信框架
使用JAVA中的NIO框架进行分布式***间消息的相互传输。通过使用NIO的非阻塞通信方式,避免了消息发送过程中线程的阻塞。通过IO多路复用的方式实现一个线程同时管理多个网络链接,IO多路复用服务调用时序图如图4所示,***不需要为每个消息通信建立新的线程,减少了***处理网络IO时的资源占用。
(二)对消息进行合并和并发处理
在消息发送的客户端对消息进行合并,通过对消息合并后降低了分布式***间消息交互时的网络通信次数来提高***的处理性能。对消息进行合并处理的同时要控制消息合并的数量和消息等待合并的最长等待时间,保证消息通信的实效性,同时服务端对接受到的合并消息中每个消息进行并发的业务处理,解决消息合并后带来的处理延时增加的问题。
通过上述两种方法的有机融合,实现了大数据分布式***中消息处理优化方法。
基于NIO的大数据分布式***的消息处理优化方法具有如下的构成:
消息产生模块,用于生成业务消息并将业务消息对象加入到消息发送队列;
消息分发模块,获取消息发送队列中的消息,对消息进行合并和格式转换;
消息发送模块,消费消息发送队列中的消息,将业务消息对象转换成可在网络上传输的格式并使用非阻塞的方式发送消息;
消息接收模块,用于接收消息发送方发送的消息,并将消息交由消息处理模块进行处理,并在消息模块处理完成之后将处理的结果信息返回给消息发送者;
消息处理模块,对消息进行处理,根据接收的消息中的业务信息进行相应的业务操作,并生成操作的结果信息;
消息返回处理模块,等待消息的处理结果,并根据返回的处理结果进行相应的业务操作。
本发明中的该基于NIO的大数据分布式***的消息处理优化方法,处理过程如图5所示,所述的方法包括以下步骤:
(1)消息产生模块解耦消息发送,产生消息并将消息封装成消息对象之后加入到消息发送队列中;
(2)消息发送模块从消息发送队列中获取消息对象,并对消息对象进行合并和转换;
(3)消息发送模块使用NIO中的SocketChannel组件,以非阻塞的方式通过网络发送给远程服务端;
(4)消息的接收模块处理消息发送放的发送请求,将消息报文信息重新封装成消息对象后交由消息处理模块处理;
(5)消息处理模块,获取到消息对象之后根据消息进行相关的业务处理并生成处理处理结果;
(6)消息返回处理模块通过等待远程服务的处理结果,并根据返回的消息的信息进行后续的业务处理。
所述的消息产生模块在实施过程中的具体步骤如下:
(1.1)从业务处理的逻辑中生成消息,将消息封装成单独的的消息对象,采用UUID的randomUUID方法为每个消息生成唯一的表示ID;
(1.2)发送队列使用BlockingQueue阻塞队列实现,将消息对象加入到消息的发送队列中去;
(1.3)继续后续的业务的处理或完成业务处理。
所述的消息分发模块在实施过程中的具体步骤如下:
(2.1)从配置文件中获取消息分发服务线程的配置参数信息并根据参数启动消息分发服务;
(2.2)消息分发服务从消息队列中读取消息信息,采用poll方式从队列中获取消息对象,具体使用的方法为queue.poll(timeOut,timeUnit),第一的参数是等待的时间数,第二个是时间单位;分为以下种情况:
a)如果获取的消息对象不为空,继续步骤(2.2);
b)如果获取的消息对象为空,继续步骤(2.4);
(2.3)将消息对象消息加入到消息待处理列表batchList中;
(2.4)判断batchList的长度是否达到了配置的最大消息合并长度;如果未达到最大合并数继续(2.);如果达到了最大的合并数,继续步骤(2.6);
(2.5)若batchList的长度大于0,计算当前***的时间和最后一次处理待处理列表中的消息的时间的时间差,判断时间差是否大于或等于配置的带处理消息最长等待时间,是的话继续步骤(2.6),否则的话继续步骤(2.2);
(2.6)当达到最大合并消息数或达到最长等待时间的时候,将带处理消息列表中的消息提取出来,生成新的待处理消息数组;
(2.7)使用新的待处理消息数组构造新的消息发送处理线程,将消息发送现场加入到消息发送线程池中执行;
(2.8)将原来列表中的带处理信息清空用于下次使用,更新最后一次处理待处理列表中的消息的时间为当前时间,继续步骤(2.2)。
消息分发模块的总体流程伪代码如下所示:
其中(2.4)和(2.5)对应的上面伪代码中的isBatch方法,伪代码如下:
所述的消息发送模块在实施过程中的具体步骤如下:
(3.1)从配置文件中获取消息发送服务的配置参数,并根据配置启动消息发送的服务;
(3.2)消息发送线程对消息对象数组进行转化,生成JSON格式的报文信息;
(3.3)使用NIO中的SocketChannel组件打开消息的发送通道;并将通道的阻塞方式配置为非阻塞;
(3.4)使用生成的报文消息生产报文的字节缓冲区,使用缓冲区的方式发送消息;
(3.5)将报文字节缓冲区中的数据写入到通道中,循环判断缓冲区中的数据是否还有剩余数据,有的话继续写到通道中;没有的话表示所有数据已经写入到通道中,继续下一步;
(3.6)将通道的读取事件注册到IO多路复用选择器Selector,注册的事件为SelectionKey.OP_READ可读取事件。
消息发送模块实现的伪代码如下:
所述的消息的接收模块在实施过程中的具体步骤如下:
(4.1)创建服务端的消息接收通道,将通道设置为非阻塞,并指定通道绑定的端口;
(4.2)从服务端通道中获取消息发送的请求链接,非阻塞模式下获取链接的方法不会阻塞等待;
(4.3)若没有请求时则获取到空对象,此时重新执行步骤(2);若有请求进来时可以获取到该请求的链接继续步骤(4.4);
(4.4)将获取到的消息请求通道的可读事件注册到服务端的IO多路复用选择器中;
(4.5)监听上述IO多路复用选择器中可读取事件,当消息请求通道中数据到达时,通道将变成可读取状态,可以通过上述的选择器获取该传输通道;
(4.6)申请新的字节缓冲区,从通道中读取客户端发送的消息信息到缓冲区中;
(4.7)从缓冲区中读取消息报文信息;
(4.8)将消息报文信息数据转换成消息对象数组;
(4.9)根据消息对象生成业务处理的Callable对象,每个消息对象生成一个Callable对象,获得一组处理业务的Callable对象列表;
(4.10)将生成的Callable对象列表使用线程池进行处理,调用invokeAll(tasks,timeout,unit)方法对业务进行并行操作并等待结果,其中参数tasks表示任务列表,参数timeout表示超时时间数,参数unit表示时间单位。执行完成或者超时后将得到一组表示处理结果的List<Future<T>>;
(4.11)从执行的结果列表List<Future<T>>中获取业务的执行的结果,将执行结果进行拼接写入到返回的信息中,如果执行错误则将错误信息写入到返回的信息中,返回的处理消息包含原消息中的ID;
(4.12)将处理结果信息转换成报文的形式,将报文返回给调用的客户端。
所述的消息处理模块在实施过程中的具体步骤如下:
(5.1)从配置文件中获取消息处理服务配置参数信息并根据参数启动消息处理服务;
(5.2)通过线程池以并发的方式处理消息;
(5.3)根据消息处理的结果生成返回的消息对象,并返回给上述的消息接收模块;
所述的消息返回处理模块包含以下步骤:
(6.1)当返回的处理信息返回客户端时,通过客户端的IO多路复用选择器选取到已返回处理结果的传输通道;
(6.2)从传输通道中读取服务端返回的消息到缓冲区中;
(6.3)从缓冲区中获取返回的处理信息;
(6.4)解析返回的信息,根据返回信息中的原消息ID区分每个业务操作
(6.5)根据消息的返回结果进行下一步的业务处理,如果消息的返回结果包含错误信息,根据需要重发消息进行重试或者根据消息ID对业务进行回滚操作。
采用了本发明的基于NIO针对大数据分布式***进行消息处理优化的***及方法,解决了大数据量分布式***间消息通信时***资源占用过高和处理效率不高的问题,提出了一种基于NIO的大数据分布式***的消息处理优化方法,该技术方案由消息产生模块、消息的分发模块、消息发送模块、消息的接收模块、消息的处理模块和消息返回处理模块构成;采用了该消息优化处理方法的***,能够有效的降低分布式***间消息通信时的资源占用高的问题,在提高消息通信的效率的同时保证了消息通信的及时性,且***的通用性强,架构灵活,可扩展性高。该发明采用的方法很好的满足目前分布式***间大批量和高并发消息通信的需求,具有广泛的应用范围。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
Claims (7)
1.一种利用基于NIO针对大数据分布式***进行消息处理优化的***实现基于NIO针对大数据分布式***进行消息处理优化控制的方法,所述的***包括:
消息产生模块,用于生成业务消息并将业务消息对象加入到消息发送队列;
消息分发模块,与所述的消息产生模块相连接,用于对消息进行合并和格式转换;
消息发送模块,与所述的消息分发模块相连接,用于将业务消息对象转换成可在网络上传输的格式,并使用非阻塞的方式发送消息;
消息接收模块,与所述的消息发送模块相连接,用于将消息交由后续模块进行处理,并在处理后将处理的结果信息返回给消息发送模块;
消息处理模块,与所述的消息接收模块相连接,用于对消息进行处理,根据接收的消息中的业务信息进行相应的业务操作,并生成操作的结果信息;
消息返回处理模块,与所述的消息处理模块相连接,用于等待消息的处理结果,并根据返回的处理结果进行相应的业务操作;
其特征在于,所述的方法包括以下步骤:
(1)所述的消息产生模块解耦消息发送,产生消息并将消息封装成消息对象之后加入到消息发送队列中;
(2)所述的消息分发模块从消息发送队列中获取消息对象,并对消息对象进行合并和转换;
(3)所述的消息发送模块使用NIO组件,以非阻塞的方式通过网络发送给远程服务端;
(4)所述的消息接收模块处理消息发送方的发送请求,将消息报文信息重新封装成消息对象后交由消息处理模块处理;
(5)所述的消息处理模块获取到消息对象之后根据消息进行相关的业务处理并生成处理结果;
(6)所述的消息返回处理模块通过等待远程服务的处理结果,并根据返回消息的信息进行后续的业务处理;
所述的步骤(4)具体包括以下步骤:
(4.1)所述的消息接收模块创建服务端的消息接收通道,将通道设置为非阻塞模式,并指定通道端口,从服务端通道中获取消息发送的请求链接;
(4.2)判断是否获取到新的请求的链接,如果是,则继续步骤(4.3);否则,重新执行步骤(4.2);
(4.3)所述的消息接收模块将获取到的消息请求通道的可读事件注册到服务端的IO多路复用选择器中,监听IO多路复用选择器中可读取事件,消息请求通道中数据传输完成后,通过上述的IO多路复用选择器获取该消息接收通道;
(4.4)所述的消息接收模块申请新的字节缓冲区,读取消息报文信息并转换成消息对象数组,生成业务处理任务,将消息处理任务列表使用线程池进行并发处理,指定执行业务允许的最长等待时间,生成一组消息处理的结果列表;
(4.5)所述的消息接收模块从所述的结果列表中获取业务的执行的结果,将执行结果进行拼接写入到返回的信息中,将处理结果信息转换成报文的形式,将报文返回给调用的客户端。
2.根据权利要求1所述的基于NIO针对大数据分布式***进行消息处理优化控制的方法,其特征在于,所述的步骤(1)具体包括以下步骤:
(1.1)所述的消息产生模块从业务处理的逻辑中生成消息,将消息封装成单独的消息对象;
(1.2)所述的消息产生模块将消息对象加入到消息的发送队列中,继续后续的业务处理或完成业务处理。
3.根据权利要求1所述的基于NIO针对大数据分布式***进行消息处理优化控制的方法,其特征在于,所述的步骤(2)具体包括以下步骤:
(2.1)所述的消息分发模块从配置文件中获取消息分发服务线程的配置参数信息,并根据参数启动消息分发服务;
(2.2)所述的消息分发模块从消息队列中读取消息信息;
(2.3)所述的消息分发模块将消息对象加入到消息待处理列表中,判断消息待处理列表中的消息数量是否达到了配置的最大消息合并长度,如果是,则继续步骤(2.6);否则,继续(2.5);
(2.4)消息待处理列表不为空时,计算当前***的时间和最后一次进行消息批量处理时间的时间差,判断时间差是否大于或等于配置的带处理消息最长等待时间,如果是,则继续步骤(2.5);否则,继续步骤(2.2);
(2.5)达到最大合并消息数或最长等待时间时,提取带处理消息列表中的消息,生成新的待处理消息数组;
(2.6)所述的消息分发模块使用新的待处理消息数组构造新的消息发送处理线程,将消息发送现场加入到消息发送线程池中执行;
(2.7)所述的消息分发模块将原来列表中的带处理信息清空用于下次使用,更新最后一次处理待处理列表中的消息的时间为当前时间,继续步骤(2.2)。
4.根据权利要求3所述的基于NIO针对大数据分布式***进行消息处理优化控制的方法,其特征在于,所述的步骤(2.2)具体包括以下步骤:
(2.2.1)判断当前队列是否有消息,如果是,则获取消息对象,继续步骤(2.3);否则,继续步骤(2.2.2);
(2.2.2)等待预设的时间,判断等待的时间范围内是否有新消息加入队列中,如果是,则获取消息对象或继续步骤(2.3);否则,继续步骤(2.4)。
5.根据权利要求1所述的基于NIO针对大数据分布式***进行消息处理优化控制的方法,其特征在于,所述的步骤(3)具体包括以下步骤:
(3.1)所述的消息发送模块从配置文件中获取消息发送服务的配置参数,并根据配置启动消息发送的服务;
(3.2)所述的消息发送模块对消息对象数组进行转化,生成字符格式的消息报文;
(3.3)打开消息的发送通道,并将通道的阻塞方式配置为非阻塞;
(3.4)使用生成的报文消息生产报文的字节缓冲区,使用缓冲区的方式发送消息;
(3.5)所述的消息发送模块将报文字节缓冲区中的数据写入到通道中,直至所有数据写入到通道中,将通道的读取事件注册到IO多路复用选择器中。
6.根据权利要求1所述的基于NIO针对大数据分布式***进行消息处理优化控制的方法,其特征在于,所述的步骤(5)具体包括以下步骤:
(5.1)所述的消息处理模块从配置文件中获取消息处理服务配置参数信息并根据参数启动消息处理服务;
(5.2)所述的消息处理模块通过线程池以并发的方式处理每一个消息处理任务;
(5.3)所述的消息处理模块根据消息处理的结果生成消息处理结果信息,并返回给所述的消息接收模块。
7.根据权利要求1所述的基于NIO针对大数据分布式***进行消息处理优化控制的方法,其特征在于,所述的步骤(6)具体包括以下步骤:
(6.1)所述的消息返回处理模块通过客户端的IO多路复用选择器选取已返回处理结果的传输通道;
(6.2)从传输通道中读取服务端返回的消息到缓冲区中,从缓冲区中获取返回的处理信息;
(6.3)解析返回的信息,根据返回信息中的原消息ID区分每个业务操作;
(6.4)判断息的返回结果是否包含错误信息,如果是,则根据需要重发消息进行重试或者根据消息ID对业务进行回滚操作;否则,根据消息的返回结果进行下一步的业务处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910411724.8A CN110134534B (zh) | 2019-05-17 | 2019-05-17 | 基于nio针对大数据分布式***进行消息处理优化的***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910411724.8A CN110134534B (zh) | 2019-05-17 | 2019-05-17 | 基于nio针对大数据分布式***进行消息处理优化的***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110134534A CN110134534A (zh) | 2019-08-16 |
CN110134534B true CN110134534B (zh) | 2023-08-25 |
Family
ID=67574913
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910411724.8A Active CN110134534B (zh) | 2019-05-17 | 2019-05-17 | 基于nio针对大数据分布式***进行消息处理优化的***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110134534B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113626208B (zh) * | 2020-05-08 | 2024-05-14 | 许继集团有限公司 | 一种基于nio异步线程模型的服务器通信方法 |
CN112395083B (zh) * | 2020-09-30 | 2022-03-15 | 腾讯科技(深圳)有限公司 | 一种资源文件的释放方法、装置和计算机可读存储介质 |
CN112565056B (zh) * | 2020-11-11 | 2022-09-09 | 中国软件与技术服务股份有限公司 | 一种即时通讯处理群发上线、下线消息的方法和装置 |
CN112905358B (zh) * | 2021-02-05 | 2024-06-21 | 中国工商银行股份有限公司 | 分布式***的软件分发方法、装置及*** |
CN113127204B (zh) * | 2021-04-29 | 2023-05-16 | 四川虹美智能科技有限公司 | 一种基于反应堆网络模型处理并发业务的方法和服务器 |
CN113553199B (zh) * | 2021-07-14 | 2024-02-02 | 浙江亿邦通信科技有限公司 | 一种使用异步非阻塞模式处理多客户端接入的方法及装置 |
CN117279041A (zh) * | 2023-11-20 | 2023-12-22 | 武汉星纪魅族科技有限公司 | 数据发送、数据接收方法、设备、介质及程序产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1855898A (zh) * | 2005-04-30 | 2006-11-01 | 华为技术有限公司 | 基于ip的消息业务中消息传送的方法 |
CN102323894A (zh) * | 2011-09-08 | 2012-01-18 | 上海普元信息技术股份有限公司 | 企业分布式应用间实现非阻塞方式相互调用的***及方法 |
CN103297395A (zh) * | 2012-02-24 | 2013-09-11 | 阿里巴巴集团控股有限公司 | 一种互联网业务的实现方法、***以及装置 |
CN106850829A (zh) * | 2017-02-28 | 2017-06-13 | 苏州星熙数据科技有限公司 | 一种基于非阻塞通信的微服务***设计方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8935707B2 (en) * | 2011-05-16 | 2015-01-13 | Oracle International Corporation | System and method for providing a messaging application program interface |
-
2019
- 2019-05-17 CN CN201910411724.8A patent/CN110134534B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1855898A (zh) * | 2005-04-30 | 2006-11-01 | 华为技术有限公司 | 基于ip的消息业务中消息传送的方法 |
CN102323894A (zh) * | 2011-09-08 | 2012-01-18 | 上海普元信息技术股份有限公司 | 企业分布式应用间实现非阻塞方式相互调用的***及方法 |
CN103297395A (zh) * | 2012-02-24 | 2013-09-11 | 阿里巴巴集团控股有限公司 | 一种互联网业务的实现方法、***以及装置 |
CN106850829A (zh) * | 2017-02-28 | 2017-06-13 | 苏州星熙数据科技有限公司 | 一种基于非阻塞通信的微服务***设计方法 |
Non-Patent Citations (1)
Title |
---|
NIO网络开发设计实践;彭帅;《程序员》;20080201;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110134534A (zh) | 2019-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110134534B (zh) | 基于nio针对大数据分布式***进行消息处理优化的***及方法 | |
US8238350B2 (en) | Message batching with checkpoints systems and methods | |
US20040068479A1 (en) | Exploiting asynchronous access to database operations | |
CN100450105C (zh) | 一种基于java消息服务的同步消息接口实现方法 | |
CN102810069A (zh) | 一种java对象的请求和响应方法、装置、***和终端 | |
CN111404931B (zh) | 一种基于持久性内存的远程数据传输方法 | |
CN102469064A (zh) | 通信实现方法及通信设备 | |
CN113032166B (zh) | 核间通信的方法、处理器、核间通信***及计算机可读存储介质 | |
US20120173737A1 (en) | Method and system for data processing | |
CN111722944B (zh) | 一种基于nio的airt-ros通信方法及*** | |
CN105141603A (zh) | 通信数据传输方法及*** | |
CN108737397B (zh) | 一种实现路由器中业务与协议栈之间数据交互的方法 | |
US8135851B2 (en) | Object request broker for accelerating object-oriented communications and method | |
CN1293463C (zh) | 用于分组互异操作的***和方法 | |
CN105208004A (zh) | 一种基于obd设备的数据入库方法 | |
EP2439881A1 (en) | Cluster system and request message distribution method for processing multi-node transaction | |
CN113259408B (zh) | 数据传输方法和*** | |
CN114095537A (zh) | 一种物联网应用中基于Netty的海量数据接入方法及*** | |
CN111638979A (zh) | 调用请求的处理方法、装置、电子设备及可读存储介质 | |
CN114911632B (zh) | 一种进程间通信的控制方法和*** | |
CN114816792B (zh) | 一种基于专用通道的远程函数调用方法 | |
CN112019452B (zh) | 一种业务需求的处理方法、***及相关装置 | |
US8176117B2 (en) | Accelerator for object-oriented communications and method | |
CN111176799A (zh) | 一种业务调度方法、设备和存储介质 | |
CN110380991A (zh) | 一种IOCP机制及基于eFPGA和IOCP的物联网通信加速*** |
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 |