CN114567667A - 一种基于责任链设计模式的业务处理组件系统 - Google Patents
一种基于责任链设计模式的业务处理组件系统 Download PDFInfo
- Publication number
- CN114567667A CN114567667A CN202210212160.7A CN202210212160A CN114567667A CN 114567667 A CN114567667 A CN 114567667A CN 202210212160 A CN202210212160 A CN 202210212160A CN 114567667 A CN114567667 A CN 114567667A
- Authority
- CN
- China
- Prior art keywords
- service
- pipeline
- commandhandlerpipeline
- class
- commandhandler
- 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.)
- Granted
Links
- 238000012545 processing Methods 0.000 title claims abstract description 56
- 238000013461 design Methods 0.000 title claims abstract description 9
- 238000000034 method Methods 0.000 claims abstract description 39
- 235000010627 Phaseolus vulgaris Nutrition 0.000 claims description 2
- 244000046052 Phaseolus vulgaris Species 0.000 claims description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0876—Aspects of the degree of configuration automation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/20—Network management software packages
Abstract
本发明公开了一种基于责任链设计模式的业务处理组件系统,包括业务请求参数端和业务处理结果端;还包括分别与业务请求参数端和业务处理结果端连接的业务逻辑接口CommandHandler、业务管道实现类CommandHandlerPipeline、流水线基础元素CommandHandlerContext。本发明实现了不与任何API耦合,单纯处理业务逻辑,且对外提供异常处理扩展,并与spring完美结合,通过spring的IOC自动完成责任链的初始化的基于责任链设计模式的业务处理组件系统。
Description
技术领域
本发明涉及计算机软件领域,尤其涉及的是一种基于责任链设计模式的业务处理组件系统。
背景技术
责任链模式是一种处理请求的模式,它让多个处理器都有机会处理该请求,直到其中某个处理成功为止。责任链模式把多个处理器串成链,然后让请求在链上传递;现有使用责任链模式的实现中,都与特定场景、特定功能结合,无法用于通用的业务处理场景下。
现有技术包括以下两类:
1、Tomcat中的Servlet过滤器。
Servlet过滤器是可用于Servlet编程的Java类,可以实现以下目的:在客户端的请求访问后端资源之前,拦截这些请求;在服务器的响应发送回客户端之前,处理这些响应。
在运行过滤器之前需要完成过滤器的加载和初始化,以及根据配置信息生成过滤器链:
(1)过滤器的加载具体是在ContextConfig类的configureContext方法中,分别加载filter和filterMap的相关信息,并保存在上下文环境中;
(2)过滤器的初始化在StandardContext类的startInternal方法中完成,保存在filterConfigs中并存到上下文环境中;
(3)请求流转到StandardWrapperValve时,在invoke方法中,会根据过滤器映射配置信息,为每个请求创建对应的ApplicationFilterChain,其中包含了目标Servlet以及对应的过滤器链,并调用过滤器链的doFilter方法执行过滤器;
2、Netty中的ChannelPipeline、ChannelHandlerContext、Handler组件。
一个channel对应一条ChannelPipeline,Netty在传输层接收或者发送消息之前,都会将消息派发事件到ChannelPipeline中进行流转。
在启动Netty时,服务端和客户端可分别在public B handler(ChannelHandlerhandler)和public ServerBootstrap childHandler(ChannelHandler childHandler)方法中配置父子channel的Handler。然后Netty会根据该配置,在初始化channel时,同时初始化pipeline。以子channel为例,其pipeline初始化和运行过程如下:
(1)父channel在传输层收到消息,开始创建子channel;
(2)为子channel初始化pipeline,根据之前在childHandler()方法中配置的handler,将handler包装为ChannelHandlerContext,并根据配置的先后顺序,依次加入到pipeline内置的链表中,完成初始化;
(3)channel将消息派发到初始化完成的pipeline中,然后消息就会按配置的顺序,并根据消息类型(netty将消息分为入站消息和出站消息),沿着pipeline里ChannelHandlerContext链的顺序,往一个方向传递下去。
上述两类现有技术中,Tomcat中的Servlet过滤器与Servlet容器相关API耦合,只能用于处理HTTP请求,且其未提供全局的异常处理;而Netty中的ChannelPipeline也正如其名,是与Channel耦合在一起的,只能用在Netty自身的IO处理。这两类技术也无法直接用在现在业务开发使用的spring环境下。
因此,现有技术存在缺陷,需要改进。
发明内容
本发明所要解决的技术问题是:提供一种不与任何API耦合,单纯处理业务逻辑,且对外提供异常处理扩展,并与spring完美结合,通过spring的IOC自动完成责任链的初始化的基于责任链设计模式的业务处理组件系统。
本发明的技术方案如下:一种基于责任链设计模式的业务处理组件系统,包括业务请求参数端和业务处理结果端;还包括分别与业务请求参数端和业务处理结果端连接的业务逻辑接口CommandHandler、业务管道实现类CommandHandlerPipeline、流水线基础元素CommandHandlerContext;其中,业务逻辑接口CommandHandler用于处理业务和处理异常;业务管道实现类CommandHandlerPipeline用于为业务逻辑接口CommandHandler提供实现具体业务处理和异常处理的方法;流水线基础元素CommandHandlerContext用于封装业务逻辑接口CommandHandler并将其链接到业务管道实现类CommandHandlerPipeline的链表上。
应用于上述技术方案,所述的业务处理组件系统中,业务管道实现类CommandHandlerPipeline包含添加接口具体业务实现类的方法、用于派发事件的方法、用于处理异常的方法。
应用于上述各个技术方案,所述的业务处理组件系统中,还包括注解Handler,用于标注在业务逻辑接口CommandHandler的具体业务管道实现类CommandHandlerPipeline上,用于表示这个实现类是业务管道实现类CommandHandlerPipeline中的一个。
应用于上述各个技术方案,所述的业务处理组件系统中,还包括注解Handler的内部类注解BindPipelineInfo,用于配置业务逻辑接口CommandHandler与业务管道实现类CommandHandlerPipeline的绑定,以及order的信息。
应用于上述各个技术方案,所述的业务处理组件系统中,还包括注解Pipeline,用于标注在业务管道实现类CommandHandlerPipeline的子类上,用于表示这个类是一个业务处理的流水线。
应用于上述各个技术方案,所述的业务处理组件系统中,还包括自动配置类PipelineBeanPostProcessor,用于自动配置具体业务管道实现类CommandHandlerPipeline的方法给业务逻辑接口CommandHandler。
应用于上述各个技术方案,所述的业务处理组件系统中,还包括注解EnableHandlerPipeline,用于启用上述自动配置类PipelineBeanPostProcessor,并完成自动配置。
应用于上述各个技术方案,所述的业务处理组件系统中,还包括注册类PipelineRegister,用于扫描工程中的业务逻辑接口CommandHandler和业务管道实现类CommandHandlerPipeline,然后注册到spring容器中。
本发明的有益效果为:
本发明不与任何API耦合,单纯处理业务逻辑,且对外提供异常处理扩展,并与spring完美结合,通过spring的IOC自动完成责任链的初始化。
附图说明
图1为本发明的UML类图。
具体实施方式
以下结合附图和具体实施例,对本发明进行详细说明。
本实施例提供了一种基于责任链设计模式的业务处理组件系统,如图1所示,业务处理组件系统包括业务请求参数端Request101和业务处理结果端Response102;还包括分别与业务请求参数端Request101和业务处理结果端Response102连接的业务逻辑接口CommandHandler104、业务管道实现类CommandHandlerPipeline111、流水线基础元素CommandHandlerContext103。
其中,业务逻辑接口CommandHandler104用于处理业务和处理异常;业务逻辑接口CommandHandler104包含handleCommand和handleException两个方法,handleCommand和handleException是用于具体实现类实现该业务逻辑接口CommandHandler104,按需实现上述两个方法,分别用于处理业务和处理异常。
业务管道实现类CommandHandlerPipeline111用于为业务逻辑接口CommandHandler提供实现具体业务处理和异常处理的方法;其中,业务管道实现类CommandHandlerPipeline包含添加接口具体业务实现类的方法、用于派发事件的方法、用于处理异常的方法。具体为:包含添加CommandHander接口具体业务实现类的方法addLast(),addFirst(),用于派发事件的fireHandleCommand()方法,还有用于处理异常的fireHandleException()方法。其属性字段head和tail用于保存双向链表的头结点和尾结点。
流水线基础元素CommandHandlerContext103用于封装业务逻辑接口CommandHandler并将其链接到业务管道实现类CommandHandlerPipeline的链表上;其中,流水线基础元素CommandHandlerContext是流水线中的基础元素。一个流水线基础元素CommandHandlerContext对应一个业务逻辑接口CommandHandler,其用于封装业务逻辑接口CommandHandler,然后链接到pipeline的链表上。
并且,还包括注解Handler109,注解Handler109用于标注在业务逻辑接口CommandHandler的具体业务管道实现类CommandHandlerPipeline上,用于表示这个实现类是业务管道实现类CommandHandlerPipeline中的一个。
以及,还包括注解Handler109的内部类注解BindPipelineInfo107,内部类注解BindPipelineInfo107用于配置业务逻辑接口CommandHandler与业务管道实现类CommandHandlerPipeline的绑定,以及order的信息。
并且,还包括注解Pipeline106,注解Pipeline106用于标注在业务管道实现类CommandHandlerPipeline的子类上,用于表示这个类是一个业务处理的流水线。
还包括自动配置类PipelineBeanPostProcessor110,自动配置类PipelineBeanPostProcessor110用于自动配置具体业务管道实现类CommandHandlerPipeline的方法给业务逻辑接口CommandHandler;如此,通过具体业务管道实现类CommandHandlerPipeline的方法来实现业务逻辑接口CommandHandler。
还包括注解EnableHandlerPipeline108,注解EnableHandlerPipeline108用于启用上述自动配置类PipelineBeanPostProcessor,并完成自动配置。
最后还包括注册类PipelineRegister105,注册类PipelineRegister105用于扫描工程中的业务逻辑接口CommandHandler和业务管道实现类CommandHandlerPipeline,然后注册到spring容器中,从而实现与spring完美结合,通过spring的IOC自动完成责任链的初始化。
实际使用中,一个业务可以写一个CommandHandlerPipeline子类,并通过实现CommandHandler接口完成具体的业务逻辑,然后在该业务实现类上标注Handler注解,实现handler与pipeline的绑定。之后,可以把pipeline放到service层,在调用pipeline.fireHandleCommand()方法前将Controller层的参数设置到一个新的request实例里(调用setAttributeByName方法),然后调用fireHandleCommand方法,即可将请求流转到自己的CommandHandler实现类中。
本发明不与任何API耦合,单纯处理业务逻辑,且对外提供异常处理扩展,并与spring完美结合,通过spring的IOC自动完成责任链的初始化。
以上仅为本发明的较佳实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于责任链设计模式的业务处理组件系统,包括业务请求参数端和业务处理结果端;其特征在于:
还包括分别与业务请求参数端和业务处理结果端连接的业务逻辑接口CommandHandler、业务管道实现类CommandHandlerPipeline、流水线基础元素CommandHandlerContext;
其中,业务逻辑接口CommandHandler用于处理业务和处理异常;业务管道实现类CommandHandlerPipeline用于为业务逻辑接口CommandHandler提供实现具体业务处理和异常处理的方法;
流水线基础元素CommandHandlerContext用于封装业务逻辑接口CommandHandler并将其链接到业务管道实现类CommandHandlerPipeline的链表上。
2.根据权利要求1所述的业务处理组件系统,其特征在于:业务管道实现类CommandHandlerPipeline包含添加接口具体业务实现类的方法、用于派发事件的方法、用于处理异常的方法。
3.根据权利要求2所述的业务处理组件系统,其特征在于:还包括注解Handler,用于标注在业务逻辑接口CommandHandler的具体业务管道实现类CommandHandlerPipeline上,用于表示这个实现类是业务管道实现类CommandHandlerPipeline中的一个。
4.根据权利要求3所述的业务处理组件系统,其特征在于:还包括注解Handler的内部类注解BindPipelineInfo,用于配置业务逻辑接口CommandHandler与业务管道实现类CommandHandlerPipeline的绑定,以及order的信息。
5.根据权利要求3所述的业务处理组件系统,其特征在于:还包括注解Pipeline,用于标注在业务管道实现类CommandHandlerPipeline的子类上,用于表示这个类是一个业务处理的流水线。
6.根据权利要求1所述的业务处理组件系统,其特征在于:还包括自动配置类PipelineBeanPostProcessor,用于自动配置具体业务管道实现类CommandHandlerPipeline的方法给业务逻辑接口CommandHandler。
7.根据权利要求5所述的业务处理组件系统,其特征在于:还包括注解EnableHandlerPipeline,用于启用上述自动配置类PipelineBeanPostProcessor,并完成自动配置。
8.根据权利要求1所述的业务处理组件系统,其特征在于:还包括注册类PipelineRegister,用于扫描工程中的业务逻辑接口CommandHandler和业务管道实现类CommandHandlerPipeline,然后注册到spring容器中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210212160.7A CN114567667B (zh) | 2022-03-04 | 2022-03-04 | 一种基于责任链设计模式的业务处理组件系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210212160.7A CN114567667B (zh) | 2022-03-04 | 2022-03-04 | 一种基于责任链设计模式的业务处理组件系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114567667A true CN114567667A (zh) | 2022-05-31 |
CN114567667B CN114567667B (zh) | 2024-03-15 |
Family
ID=81717889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210212160.7A Active CN114567667B (zh) | 2022-03-04 | 2022-03-04 | 一种基于责任链设计模式的业务处理组件系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114567667B (zh) |
Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002027510A1 (en) * | 2000-09-28 | 2002-04-04 | Bea Systems, Inc. | System for managing logical process flow in an online environment |
US20060288018A1 (en) * | 2005-06-20 | 2006-12-21 | Afshan Ally | Loose coupling of Web services |
US7221650B1 (en) * | 2002-12-23 | 2007-05-22 | Intel Corporation | System and method for checking data accumulators for consistency |
CN101119268A (zh) * | 2007-06-28 | 2008-02-06 | 杭州东信北邮信息技术有限公司 | 基于通用消息总线的通用业务系统架构的实现方法 |
WO2012042478A1 (en) * | 2010-09-29 | 2012-04-05 | Sika Technology Limited | Improvements in/or and relating to utility chambers and surrounds and methods therfor |
US20140355484A1 (en) * | 2011-12-30 | 2014-12-04 | Aircom International Ltd. | Self-Organising Network |
US20160218884A1 (en) * | 2005-06-09 | 2016-07-28 | Whirlpool Corporation | Methods and apparatus for communicatively coupling internal components within appliances, and appliances with external components and accessories |
CN107133024A (zh) * | 2016-02-29 | 2017-09-05 | 北京广联达正源兴邦科技有限公司 | 基于osgi框架的业务管理系统 |
CN107329762A (zh) * | 2017-06-30 | 2017-11-07 | 上海棠棣信息科技股份有限公司 | 一种描述与集成软件服务的方法和系统 |
CN109194762A (zh) * | 2018-09-20 | 2019-01-11 | 山东省农业科学院科技信息研究所 | 基于ssh的土壤信息网络发布系统及方法 |
CN110149353A (zh) * | 2018-02-11 | 2019-08-20 | 陕西爱尚物联科技有限公司 | 一种物联网方法及其系统 |
CN112363755A (zh) * | 2020-11-20 | 2021-02-12 | 成都秦川物联网科技股份有限公司 | 一种基于插件引擎注入的低耦合扩展的业务系统 |
CN113296829A (zh) * | 2021-05-31 | 2021-08-24 | 中国建设银行股份有限公司 | 处理业务的方法、装置、设备和计算机可读介质 |
CN113672205A (zh) * | 2021-08-25 | 2021-11-19 | 广州方舟信息科技有限公司 | 一种基于业务事件驱动的工作流框架 |
CN113706123A (zh) * | 2021-09-08 | 2021-11-26 | 北京鲸鹳科技有限公司 | 一种基于组件责任链的团险业务处理方法和系统 |
CN113760487A (zh) * | 2020-08-05 | 2021-12-07 | 北京京东振世信息技术有限公司 | 一种业务处理方法和装置 |
-
2022
- 2022-03-04 CN CN202210212160.7A patent/CN114567667B/zh active Active
Patent Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002027510A1 (en) * | 2000-09-28 | 2002-04-04 | Bea Systems, Inc. | System for managing logical process flow in an online environment |
US7221650B1 (en) * | 2002-12-23 | 2007-05-22 | Intel Corporation | System and method for checking data accumulators for consistency |
US20160218884A1 (en) * | 2005-06-09 | 2016-07-28 | Whirlpool Corporation | Methods and apparatus for communicatively coupling internal components within appliances, and appliances with external components and accessories |
US20060288018A1 (en) * | 2005-06-20 | 2006-12-21 | Afshan Ally | Loose coupling of Web services |
CN101119268A (zh) * | 2007-06-28 | 2008-02-06 | 杭州东信北邮信息技术有限公司 | 基于通用消息总线的通用业务系统架构的实现方法 |
WO2012042478A1 (en) * | 2010-09-29 | 2012-04-05 | Sika Technology Limited | Improvements in/or and relating to utility chambers and surrounds and methods therfor |
US20140355484A1 (en) * | 2011-12-30 | 2014-12-04 | Aircom International Ltd. | Self-Organising Network |
CN107133024A (zh) * | 2016-02-29 | 2017-09-05 | 北京广联达正源兴邦科技有限公司 | 基于osgi框架的业务管理系统 |
CN107329762A (zh) * | 2017-06-30 | 2017-11-07 | 上海棠棣信息科技股份有限公司 | 一种描述与集成软件服务的方法和系统 |
CN110149353A (zh) * | 2018-02-11 | 2019-08-20 | 陕西爱尚物联科技有限公司 | 一种物联网方法及其系统 |
CN109194762A (zh) * | 2018-09-20 | 2019-01-11 | 山东省农业科学院科技信息研究所 | 基于ssh的土壤信息网络发布系统及方法 |
CN113760487A (zh) * | 2020-08-05 | 2021-12-07 | 北京京东振世信息技术有限公司 | 一种业务处理方法和装置 |
CN112363755A (zh) * | 2020-11-20 | 2021-02-12 | 成都秦川物联网科技股份有限公司 | 一种基于插件引擎注入的低耦合扩展的业务系统 |
CN113296829A (zh) * | 2021-05-31 | 2021-08-24 | 中国建设银行股份有限公司 | 处理业务的方法、装置、设备和计算机可读介质 |
CN113672205A (zh) * | 2021-08-25 | 2021-11-19 | 广州方舟信息科技有限公司 | 一种基于业务事件驱动的工作流框架 |
CN113706123A (zh) * | 2021-09-08 | 2021-11-26 | 北京鲸鹳科技有限公司 | 一种基于组件责任链的团险业务处理方法和系统 |
Non-Patent Citations (3)
Title |
---|
KENDRA L. B. COOK: "The ITAR and you - what you need to know about the International Traffic in Arms Regulations", 2010 IEEE AEROSPACE CONFERENCE, 15 April 2010 (2010-04-15) * |
林贻民: "分布式大数据服务开放平台的设计与实现", 信息科技辑, 15 April 2021 (2021-04-15) * |
饿了就下楼: "Netty解析:Handler、Pipeline大动脉及其在注册过程中体现", 简书 * |
Also Published As
Publication number | Publication date |
---|---|
CN114567667B (zh) | 2024-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107979508B (zh) | 微服务测试方法及装置 | |
US7089317B2 (en) | Architecture for plugging messaging systems into an application server | |
US8046772B2 (en) | System and method for enterprise application interactions | |
US7801996B2 (en) | Systems and methods for providing a local client proxy | |
JP2004532456A (ja) | 開発およびテストシステム並びに方法 | |
CN114579194B (zh) | 一种基于Spring远程调用的异常处理方法和系统 | |
US20240069877A1 (en) | Method and device for generating application based on android system, and storage medium | |
CN111930531B (zh) | 数据处理、数据生产、数据消费方法、装置、设备及介质 | |
CN107977260B (zh) | 任务提交方法及装置 | |
US20100036859A1 (en) | Message Exchange Pattern Rendezvous Abstraction | |
CN114567667A (zh) | 一种基于责任链设计模式的业务处理组件系统 | |
CN109189591B (zh) | 用于调用应用组件的方法和装置 | |
US20040024856A1 (en) | Method and system for a services environment management engine | |
US11080102B2 (en) | System and method for developing modularized application | |
CN111694744A (zh) | 一种基于monkey源码的测试开法方法 | |
WO2017166166A1 (en) | System and method for providing runtime tracing for web-based client accessing transactional middleware platform using extension interface | |
Mostinckx et al. | Mirror‐based reflection in AmbientTalk | |
CN113672205B (zh) | 一种基于业务事件驱动的工作流框架 | |
US20050086632A1 (en) | Interface method for a device driver | |
CN111008015B (zh) | 一种基于前端技术实现的微前端应用框架 | |
AU2019100212A4 (en) | System and method for developing modularized application | |
CN112035439A (zh) | 数据迁移方法及装置、计算机设备及计算机可读存储介质 | |
CN110852139A (zh) | 生物特征识别方法、装置、设备以及存储介质 | |
CN111782421B (zh) | 一种注册广播的方法、装置、设备及存储介质 | |
Juneau et al. | Jakarta Messaging |
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 |