CN112380028A - 一种异步非阻塞响应式消息处理方法 - Google Patents
一种异步非阻塞响应式消息处理方法 Download PDFInfo
- Publication number
- CN112380028A CN112380028A CN202011152975.8A CN202011152975A CN112380028A CN 112380028 A CN112380028 A CN 112380028A CN 202011152975 A CN202011152975 A CN 202011152975A CN 112380028 A CN112380028 A CN 112380028A
- Authority
- CN
- China
- Prior art keywords
- processing
- thread
- message
- client
- message queue
- 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
- 230000000903 blocking effect Effects 0.000 title claims abstract description 28
- 230000004044 response Effects 0.000 title claims abstract description 23
- 238000003672 processing method Methods 0.000 title claims abstract description 12
- 238000012545 processing Methods 0.000 claims abstract description 89
- 238000004891 communication Methods 0.000 claims abstract description 45
- 238000000034 method Methods 0.000 abstract description 21
- 230000008569 process Effects 0.000 abstract description 17
- 230000001360 synchronised effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000009792 diffusion process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
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/546—Message passing systems or structures, e.g. queues
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5016—Session
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
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
本发明公开一种异步非阻塞响应式消息处理方法。所述方法包括:通信线程监听客户端的连接,并建立连接,接收客户端的请求消息,然后将请求消息发送到处理线程的第一消息队列;处理线程从第一消息队列中取出所述请求消息,如果不需要其他系统,建立会话,然后处理所述请求消息,将处理结果或处理失败原因通过通信线程发送给客户端;如果需要其他系统,处理线程挂起会话,等待其他系统应答的同时处理新的消息。本发明采用异步非阻塞响应方式处理消息,及时响应客户端请求,使日连接数量达到几十万甚至上百万,在等待其他系统的应答时,不阻塞线程,同时处理新的消息,使一个线程可以处理几万到十几万的请求数。
Description
技术领域
本发明属于网络通信技术领域,具体涉及一种异步非阻塞响应式消息处理方法。
背景技术
支撑云平台长时间自主运行的是服务。服务与服务间的通信,可以维持两个不同平台之间的正常交互。而云平台间的数据传输依赖接口,接口间多数使用http通信协议进行数据传输。客户端为客户提供了本地服务,http客户端之间的接口开发需要一定的通讯规则。接口间的通信常用的规则和约定有通信方式、规则和约定、安全方式、交易模式等。目前的接口调用平台是基于springboot框架的,springboot框架的优点是前后端完全分离,只需要协商好接口就行,前端负责开发页面并调用后端接口展示数据。后端只负责提供rest接口。而目前主流的开发模式为同步阻塞模式,其工作流程为:服务端启动监听;接收到一个客户端连接时一个线程处理(可以是线程池,也能是直接启动线程);接收请求(接受请求时,线程阻塞在这里),处理请求,如果需要依赖其他模块时,需要发送消息给其他系统;接收其他系统的应答(发送请求和接收应答时会阻塞线程),然后处理应答,最后给客户端发送最后的应答(也会阻塞线程)。
同步阻塞模式存在下面的问题:一个连接的并发请求数非常有限,因为线程阻塞在那里,前一个请求需要等到应答后,才能发送下一个请求;连接数非常有限,因为每一个连接需要占用一个线程,当需要几万、几十万、上百万的连接并存时,系统无法开启那么多线程;系统的并发性能依赖于响应时间,如果第三方系统故障无响应时,就可能有大批的线程被阻塞在那里,直到超时后才能释放,从而导致整体性能急剧下降;故障会扩散,局部故障会扩散到整体,如果系统1出现问题,访问它的线程都会被阻塞,当某个流程不依赖系统1,而是依赖系统2,但是由于线程都阻塞在系统1上,导致线程池线程用完,没有线程来处理本来能够正常处理的新请求。
发明内容
为了解决现有技术中存在的上述问题,本发明提出一种异步非阻塞响应式消息处理方法。
为实现上述目的,本发明采用如下技术方案:
一种异步非阻塞响应式消息处理方法,包括以下步骤:
步骤1,通信线程监听客户端的连接,并建立连接,接收客户端的请求消息,然后将请求消息发送到处理线程的第一消息队列;
步骤2,处理线程从第一消息队列中取出所述请求消息,如果不需要其他系统,则建立会话,然后处理所述请求消息,将处理结果或处理失败原因发送到通信线程的第二消息队列;通信线程从第二消息队列中取出所述处理结果或处理失败原因,并发送给客户端;如果需要其他系统,转步骤3;
步骤3,处理线程将向其他系统请求的消息发送到第二消息队列,通信线程从第二消息队列中取出所述消息,并发送给其他系统;
步骤4,处理线程挂起会话,等待其他系统应答的同时,从第一消息队列中取出新的消息,并进行处理。
进一步地,通信线程工作在SOCKET异步非阻塞模式,linux操作系统下采用epoll模式,windows操作系统下采用IOCP模式。
进一步地,所述方法还包括:如果待处理的消息数量超过最大允许数量,按照最大允许数量进行处理,超出最大允许数量的消息等待处理。
与现有技术相比,本发明具有以下有益效果:
本发明基于通信线程和处理线程实现对消息的处理,由于通信线程与处理线程相互分离,通信线程只负责与客户端进行通信,如建立连接、收发消息;处理线程只负责处理消息,即使一个线程发生故障,并不影响其他线程,可将影响降到最小。本发明采用响应方式处理消息,实时响应客户端连接,接收客户端请求,将处理结果或处理失败原因返回客户端,当待处理的消息数量超过最大允许数量,按照最大允许的数量进行处理,及时响应失败和负载变化,使日连接数量达到几十万甚至上百万。本发明采用异步非阻塞方式处理消息,处理线程在等待其他系统的应答时,并不阻塞线程,而是继续处理其他消息,一个线程可以处理几万到十几万的请求数。
附图说明
图1为同步阻塞式消息处理流程示意图;
图2为异步非阻塞式消息处理流程示意图。
具体实施方式
下面结合附图对本发明作进一步详细说明。
本发明实施例一种异步非阻塞响应式消息处理方法,其流程示意图如图2所示,包括以下步骤:
S101、通信线程监听客户端的连接,并建立连接,接收客户端的请求消息,然后将请求消息发送到处理线程的第一消息队列;
S102、处理线程从第一消息队列中取出所述请求消息,如果不需要其他系统,则建立会话,然后处理所述请求消息,将处理结果或处理失败原因发送到通信线程的第二消息队列;通信线程从第二消息队列中取出所述处理结果或处理失败原因,并发送给客户端;如果需要其他系统,转S103;
S103、处理线程将向其他系统请求的消息发送到第二消息队列,通信线程从第二消息队列中取出所述消息,并发送给其他系统;
S104、处理线程挂起会话,等待其他系统应答的同时,从第一消息队列中取出新的消息,并进行处理。
本实施例针对现有同步阻塞式消息处理方法存在的问题,给出一种异步非阻塞响应式消息处理方法。本实施例主要由通信线程和处理线程实现与客户端的通信和消息处理。通信线程与处理线程基本上相互独立,通信线程只负责与客户端的通信,处理线程只负责消息处理。通信线程与处理线程之间的交互通过向对方的消息队列发送请求消息或处理结果实现。由于通信线程与处理线程相互隔离(独立),如果一个线程发生故障,不会像同步阻塞式那样影响其它线程,可以限制故障的扩散。
在本实施例中,步骤S101主要用于接收客户端的请求消息。通信线程监听到客户端的连接请求后,与客户端建立连接,并接收客户端的请求消息。通信线程可以同时与多个客户端建立连接(并发连接),有时日连接数量可达到几十万甚至上百万。通信线程监听客户连接并建立并发连接,是对客户端连接的响应,是响应方式的特征之一。通信线程将接收到的请求消息发送到处理线程的第一消息队列,等待处理线程提取并处理。值得说明的是,处理线程和通信线程都只有一个消息队列,“处理线程的第一消息队列”并不是意味着还有第一消息队列以外的其他消息队列,这里称为第一消息队列是为了区别通信线程的消息队列。同理,将通信线程的消息队列称为第二消息队列。
在本实施例中,步骤S102主要用于处理客户端的请求消息。消息处理由处理线程实现。处理线程先从第一消息队列中取出所述请求消息,然后判断是否需要其他系统,如果不需要其他系统,建立会话(与服务器内核进行连接),处理所述请求消息,并将处理结果发送到通信线程的第二消息队列。如果处理失败,将处理失败的原因发送到第二消息队列。通信线程从第二消息队列中取出所述处理结果或处理失败原因,并发送给客户端。向客户端返回失败原因是响应方式的特征之二。
在本实施例中,步骤S103、S104主要用于当处理客户端请求需要其他系统时,采取异步非阻塞方式进行消息处理。处理线程把需要其他系统的消息发送到第二消息队列,通信线程从第二消息队列中取出所述消息,并向其他系统发送请求消息。在等待其他系统应答的同时,处理线程挂起会话,从第一消息队列中取出新的消息进行处理。与同步阻塞方式不同的是,处理线程在等待其他系统应答期间并不阻塞线程,而是同时处理第一消息队列中的其他消息。本实施例采用异步非阻塞方式进行消息处理,可使一个连接中的请求并发数量明显增大,一个线程有时可处理高达几万到十几万的请求数。
作为一种可选实施例,通信线程工作在SOCKET异步非阻塞模式,linux操作系统下采用EPOLL模式,windows操作系统下采用IOCP模式。
本实施例给出了要使通信线程工作在SOCKET异步非阻塞模式,不同操作系统下采取的具体模式。在linux操作系统下采用EPOLL模式,在windows操作系统下采用IOCP模式。这里不对两种具体模式进行详细说明。
作为一种可选实施例,所述方法还包括:如果待处理的消息数量超过最大允许数量,按照最大允许数量进行处理,超出最大允许数量的消息等待处理。
本实施例给出了响应消息数量或的一种技术方案。响应方式的另一特征是对消息数量即处理负载进行响应。本实施例的响应方法是,当待处理的消息数量超过最大允许数量时,按照最大允许数量进行处理,让多出的消息处于等待状态。这样设计,既可以使处理效率最高,又可以避免因超负载运行而发生故障。
上述仅对本发明中的几种具体实施例加以说明,但并不能作为本发明的保护范围,凡是依据本发明中的设计精神所做出的等效变化或修饰或等比例放大或缩小等,均应认为落入本发明的保护范围。
Claims (3)
1.一种异步非阻塞响应式消息处理方法,其特征在于,包括以下步骤:
步骤1,通信线程监听客户端的连接,并建立连接,接收客户端的请求消息,然后将请求消息发送到处理线程的第一消息队列;
步骤2,处理线程从第一消息队列中取出所述请求消息,如果不需要其他系统,则建立会话,然后处理所述请求消息,将处理结果或处理失败原因发送到通信线程的第二消息队列;通信线程从第二消息队列中取出所述处理结果或处理失败原因,并发送给客户端;如果需要其他系统,转步骤3;
步骤3,处理线程将向其他系统请求的消息发送到第二消息队列,通信线程从第二消息队列中取出所述消息,并发送给其他系统;
步骤4,处理线程挂起会话,等待其他系统应答的同时,从第一消息队列中取出新的消息,并进行处理。
2.根据权利要求1所述的异步非阻塞响应式消息处理方法,其特征在于,通信线程工作在SOCKET异步非阻塞模式,linux操作系统下采用epoll模式,windows操作系统下采用IOCP模式。
3.根据权利要求1所述的异步非阻塞响应式消息处理方法,其特征在于,所述方法还包括:如果待处理的消息数量超过最大允许数量,按照最大允许数量进行处理,超出最大允许数量的消息等待处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011152975.8A CN112380028A (zh) | 2020-10-26 | 2020-10-26 | 一种异步非阻塞响应式消息处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011152975.8A CN112380028A (zh) | 2020-10-26 | 2020-10-26 | 一种异步非阻塞响应式消息处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112380028A true CN112380028A (zh) | 2021-02-19 |
Family
ID=74577059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011152975.8A Pending CN112380028A (zh) | 2020-10-26 | 2020-10-26 | 一种异步非阻塞响应式消息处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112380028A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113037875A (zh) * | 2021-05-24 | 2021-06-25 | 武汉众邦银行股份有限公司 | 一种分布式实时业务系统中的异步网关的实现方法 |
CN114356825A (zh) * | 2021-12-17 | 2022-04-15 | 郑州信大捷安信息技术股份有限公司 | 一种基于芯片的spi双路通信方法和系统 |
CN117176811A (zh) * | 2023-11-02 | 2023-12-05 | 北京力通通信有限公司 | 阻塞式异步监听多客户指令并控制多硬件的服务端架构、通信系统及方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164256A (zh) * | 2011-12-08 | 2013-06-19 | 深圳市快播科技有限公司 | 一种实现单机支持高并发处理方法及系统 |
CN103677760A (zh) * | 2013-12-04 | 2014-03-26 | 北京航空航天大学 | 一种基于Openflow的事件并行控制器及其事件并行处理方法 |
CN108647104A (zh) * | 2018-05-15 | 2018-10-12 | 北京五八信息技术有限公司 | 请求处理方法、服务器及计算机可读存储介质 |
WO2018236137A1 (ko) * | 2017-06-20 | 2018-12-27 | 주식회사 케이티 | M2m 시스템에서 요청 메시지를 처리하는 방법 및 그 장치 |
KR102127591B1 (ko) * | 2019-01-14 | 2020-06-26 | 건국대학교 산학협력단 | 이벤트 기반 비동기식 통신 프레임워크에서의 동기식 통신 방법 및 장치 |
CN111427751A (zh) * | 2020-04-15 | 2020-07-17 | 赞同科技股份有限公司 | 基于异步处理机制对业务进行处理的方法及系统 |
-
2020
- 2020-10-26 CN CN202011152975.8A patent/CN112380028A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164256A (zh) * | 2011-12-08 | 2013-06-19 | 深圳市快播科技有限公司 | 一种实现单机支持高并发处理方法及系统 |
CN103677760A (zh) * | 2013-12-04 | 2014-03-26 | 北京航空航天大学 | 一种基于Openflow的事件并行控制器及其事件并行处理方法 |
WO2018236137A1 (ko) * | 2017-06-20 | 2018-12-27 | 주식회사 케이티 | M2m 시스템에서 요청 메시지를 처리하는 방법 및 그 장치 |
CN108647104A (zh) * | 2018-05-15 | 2018-10-12 | 北京五八信息技术有限公司 | 请求处理方法、服务器及计算机可读存储介质 |
KR102127591B1 (ko) * | 2019-01-14 | 2020-06-26 | 건국대학교 산학협력단 | 이벤트 기반 비동기식 통신 프레임워크에서의 동기식 통신 방법 및 장치 |
CN111427751A (zh) * | 2020-04-15 | 2020-07-17 | 赞同科技股份有限公司 | 基于异步处理机制对业务进行处理的方法及系统 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113037875A (zh) * | 2021-05-24 | 2021-06-25 | 武汉众邦银行股份有限公司 | 一种分布式实时业务系统中的异步网关的实现方法 |
CN113037875B (zh) * | 2021-05-24 | 2021-07-27 | 武汉众邦银行股份有限公司 | 一种分布式实时业务系统中的异步网关的实现方法 |
CN114356825A (zh) * | 2021-12-17 | 2022-04-15 | 郑州信大捷安信息技术股份有限公司 | 一种基于芯片的spi双路通信方法和系统 |
CN114356825B (zh) * | 2021-12-17 | 2024-02-13 | 郑州信大捷安信息技术股份有限公司 | 一种基于芯片的spi双路通信方法和系统 |
CN117176811A (zh) * | 2023-11-02 | 2023-12-05 | 北京力通通信有限公司 | 阻塞式异步监听多客户指令并控制多硬件的服务端架构、通信系统及方法 |
CN117176811B (zh) * | 2023-11-02 | 2024-01-26 | 北京力通通信有限公司 | 阻塞监听多客户并控制多硬件的服务端架构、系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112380028A (zh) | 一种异步非阻塞响应式消息处理方法 | |
US6389129B1 (en) | Interface for interfacing client programs with network devices in a telecommunications network | |
CN112202872A (zh) | 一种数据转发方法、api网关及消息服务系统 | |
CN103019889A (zh) | 分布式文件系统及其故障处理方法 | |
JP2000293497A (ja) | クラスタ・ノード救援信号発生システム | |
CN113422842B (zh) | 一种考虑网络负载的分布式电力用电信息数据采集系统 | |
WO2017185615A1 (zh) | 一种业务处理设备的业务状态确定方法及调度设备 | |
CN102143288A (zh) | 呼叫中心的容灾方法和装置 | |
CN107071067B (zh) | 一种基于Cgo的高性能证券行情接入系统和方法 | |
CN105721553B (zh) | 一种自适应集群消息分发器 | |
CN114844809A (zh) | 基于网络心跳和内核磁盘心跳的多因子仲裁方法、装置 | |
CN112217878A (zh) | 高并发请求分发方法及系统 | |
CN106961529B (zh) | 工单处理方法和通信服务设备 | |
CN112506682A (zh) | 业务服务器异常救济方法、装置和计算机可读存储介质 | |
CN112839106A (zh) | 通信方法及装置、电子设备及介质 | |
CN109271259B (zh) | 企业服务总线系统、数据处理方法、终端及存储介质 | |
CN106970844A (zh) | 一种双Android系统的MTP管理方法 | |
CN113873008B (zh) | 一种rdma网络节点的连接重配方法、装置、系统及介质 | |
CN111427703A (zh) | 工业数据实时展示方法及系统 | |
US10135985B1 (en) | Immediate reconnection of a call to an agent in a contact center | |
CN112953769B (zh) | 数据传输方法、装置、计算机系统及可读存储介质 | |
CN115086311A (zh) | 一种基于云服务总线的企业跨系统服务的管理系统 | |
CN114125021B (zh) | 一种基于Netty消息驱动的终端信息发布系统 | |
CN110445834A (zh) | 一种解决推送数据丢失的方法及系统 | |
CN109710435A (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 |