java 异步框架_基于Java的轻量级异步编程框架
# **DActor**
## Introduction
DActor框架可同时支持同步和异步代码,简化在线异步代码的开发,用同步代码的思维来开发异步代码,兼顾异步代码的高并发、无阻塞和同步代码的易读性,可维护性。
基于协程思想设计
最大程度的降低阻塞,提高单个线程的处理能力,并可有效的降低线程数。
## Overview
目前开发过程中的几个常见模型
- 同步编程
所有步骤都在一个主线程中完成,调用一个方法,等待其响应返回。
- 异步编程
所有步骤都可在不同线程中完成,调用一个方法,不等待响应既返回,典型交易如NodeJs。
目前市面上的异步框架都比较复杂,一般为了实现异步编程的解决方案是CallBack和Promise/Deferred模式模式。
为了保留异步的高性能,简化异步的开发模式,同时使得程序更容易被程序员理解,基于Actor协程模型,设计了此框架。
## Features
- 1、集成Netty
- 2、集成HttpClient
- 3、集成HttpServlet
- 4、支持多层父子结构
- 5、支持责任链模式
- 6、J2EE支持json,csv,pdf,xml,html格式输出
- 7、J2EE支持数据流输出,动态文件下载、动态图片输出、跳转和可根据配置动态输出
环境要求
JDK 1.8
Spring FrameWork 4.3.22.RELEASE +
Servlet 3.0+(因为需要使用Servlet的异步功能)
注意事项
请求的完整逻辑是分散在不同的线程中执行的,所以尽量避免使用ThreadLocal
## Release Note
1.0.1版本
- 初始化版本
## Getting Started
example是J2EE程序,下载后,可直接运行,其中集成了若干例子
默认使用.do提交相关交易,但如果是.json将会返回json数据
启动后,在浏览器中输入http://localhost:8080/example/randomTxt2.json
输出的是json格式的字符串
randomTxt2:只有一级父子关系
randomTxt1:有二级父子关系
chaintest1:只使用责任链
chaintest2:同时使用责任链和一级父子关系
exceptionTest:子交易抛出错误,框架对错误的处理
httptest演示的是通过httpclient异步方式访问百度网站
访问URL:http://localhost:8080/example/ httptest.do
启动后,可在控制台看到内部调用结果
![Image text](https://github.com/allon2/dactor/raw/master/1.png)
### Maven dependency
```xml
cn.ymotel
dactor
1.0.1
```
### Gradle dependency
```
compile group: 'cn.ymotel', name: 'dactor', version:'1.0.1'
```
### 代码简单讲解
执行过程为chain->grandfather->parent->Selft。
依次调用执行责任链中逻辑,grandfather中的逻辑,parent的逻辑和自身逻辑。
chain,grandfather,parent都可为空,不设置
在grandfather和parent中的Steps中至少有一个为placeholderActor交易,以调用子逻辑
整个过程中,需要先设置全局占位符
交易中如果未填写beginBeanId或者endBeanId时,系统默认使用全局中配置的beginBeanId或者endBeanId
```
```
condtion可为空,空字符串,或者是ognl表达式
placeholderActor的作用是在暂存当前环境,并调用子交易,待子交易执行完毕后,再恢复当前环境继续执行
如果在Step中未找到toBeanIdActor,会直接调用endBeanId方法,认为自身交易已执行结束。
交易的请求和流转信息都保存在Message中
如果指定handleException=false或者使用默认设置,直接返回父中执行,如果父中也未捕获,则继续返回上一级执行,
一般来说至少有要有一个actor中指定handleException=true
启动框架接收和执行请求
github地址:https://github.com/allon2/dactor
java 异步框架_基于Java的轻量级异步编程框架相关推荐
- java全文检索功能_基于Java的全文检索引擎简介
Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基 ...
- java promise实现_基于JAVA的Promise模式实现
Promise模式是一种异步编程模式,即我们可以先开始一个任务,拿到这个任务的凭据而并不需要立即得到这个任务的执行结果才继续往下执行,我们拿着这个凭证可以在之后任何需要的时候去兑换结果.这篇文章主要介 ...
- java 新闻采集系统_基于Java技术的新闻采集器设计与实现
基于 Java 技术的新闻采集器设计与实现 赵敏涯 ; 华英 ; 吴笛 ; 黄鹏 ; 赵明明 [期刊名称] <电脑编程技巧与维护> [年 ( 卷 ), 期] 2019(000)004 [摘 ...
- java邮件系统设计_基于java技术的邮件系统设计与实现
论文字数:17915,页数:38 摘 要 电子邮件(简称E-mai1)又称电子信箱.电子邮政,它是-种用电子手段提供信息交换的通信方式.它是全球多种网络上使用最普遍的一项服务.这种非交互式的通信,加 ...
- java健身房管理系统_基于Java+SSM的健身房俱乐部管理系统、基于Java Web的健身房俱乐部管理系统...
需求分析 编写并实现一个基于Java Web/Java的健身房俱乐部管理系统, 采用SSM(Spring, SpringMVC, Mybatis)三大框架实现, 能够实现教练管理, 会员管理, 器材管 ...
- java path类_基于java Files类和Paths类的用法(详解)
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...
- java 实现违章_基于JAVA的车辆违章查询数据调用代码实例
基于JAVA的车辆违章查询数据调用代码实例 代码描述:基于JA V A的车辆违章查询数据调用代码实例 相关平台:聚合数据 import java.io.BufferedReader; import j ...
- java消费者模式_基于Java 生产者消费者模式(详细分析)
生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...
- java 酒店系统_基于JAVA的酒店管理系统
<基于JAVA的酒店管理系统>由会员分享,可在线阅读,更多相关<基于JAVA的酒店管理系统(31页珍藏版)>请在人人文库网上搜索. 1.酒店管理系统,专业: 姓名: 指导教师, ...
最新文章
- 使用Fiddler抓取手机HTTP流量包
- python merge很费内存吗,python如何使用merge实现堆
- 10套免费的 Photoshop UI 元素以及 PSD 素材
- [转] Logistic函数
- java 完全匹配,Java 正则表达式匹配模式(贪婪型、勉强型、占有型)
- 【JavaScript】用Switch实现成绩等级判断
- Go 切片使用绕坑指南
- ggplot2 | 注释函数
- 开始把一些东西放到博客上
- android8修改默认壁纸,给surfaceview设置默认背景
- [转载] 嵌入式文件系统
- 在线教育行业APP高效开发解决方案
- Alarm:IT界朋友请珍惜你的身体[转贴]
- vscode+cmake编译Telink Demo
- delphi10.2 将网页页面带格式复制到word中。
- android 华为 imei,华为手机EMUI系统查看S/N IMEI/MEID 产品识别码的方法
- python报错ImportError: cannot import name ‘Image‘ from ‘PIL‘ 的时候大多数情况下是由于PIL版本和当前python的版本出现了不兼容
- SEO网站内容优化的6点干货分享分享-飞鱼SEO
- 自定义一个python日志类
- pdf文件转换成jpg文件