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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Silverlight】Bing Maps开发应用与技巧二:自定义图钉标注控件和动态ToolPanel

在Bing Maps Silverlight Control中以及为我们提供了地图图钉控件Pushpin,我曾经在《使用图钉层(Pushpin layer)及地图图层(MapLayer)》一文中介绍过他的使用方法,本篇主要介绍如何自定义图钉标注控件以及对…

比拼浮点运算速度,超算排行榜是这样“算”出来的

6月17日,新一期全球超算500强榜单出炉,入选500强的所有超算浮点运算速度都突破每秒千万亿次,中国超算也在前四占有两席位置。 普通计算机用指令运算速度衡量计算性能,而超算通常用浮点运算速度来衡量其性能。那么,什么…

[软技能] 在前后端分离项目里,请说说前端传递的token的流程?

[软技能] 在前后端分离项目里,请说说前端传递的token的流程? (一):cookie前端 post 账号密码,后端 response header: set-cookie, 将 token 插入 cookie 内,之后每次针对该域名下的请求都会带上…

java short后缀_自学java的新手问个问题,为什么写个代码中的int能自动转

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼你学一个东西 先学会他的定义java语法是这样定义的 类型修饰符 变量名 值其中左边是被赋值的 右边是赋值的 类型修饰符有 八种 int boolean char short long float double byte当你声明 一个变量时 的语法是类型修饰符 变量名; 也…

[html] 使用svg画一个爱心

[html] 使用svg画一个爱心 <head><style>*,*:before,*:after {box-sizing: border-box;margin: 0;padding: 0;}.heart-loader {position: absolute;display: block;left: 50%;top: 50%;margin-top: -90px;width: 180px;height: 180px;overflow: visible;transform…

webkit

#ifndef MAINWINDOW_H #define MAINWINDOW_H .pro文件QT core gui webenginewidgets #include <QMainWindow>Qt5 不支持webkit #include <QWebEngineView> #include <QUrl> namespace Ui { class MainWindow; } class MainWindow : public QMainWin…

java args eclipse_不会在eclipse中运行含有args[]参数的Java代码,求指导

这不还是上次那个东西吗&#xff1f;我没准备PC上的java开发环境&#xff0c;所以在Raspberry Pi的命令行上&#xff0c;给你从编译到执行尝试了一下&#xff0c;供参考。编辑源代码&#xff1a;pirpi ~ $ nano SequenceDemo.java文件内容填入&#xff1a;import java.lang.Mat…

[html] 使用svg画一个三角形

[html] 使用svg画一个三角形 效果 Screen Shot 2020-11-13 at 14 39 20 说明 svg 定义svg元素 viewBox 定义svg的画布大小&#xff0c;0 0 100 100指的是x、y偏移为0&#xff0c;宽高为100(相对单位) <path /> 定义一个路径元素 fill"..." 定义路径的填充颜色…

数据库连接和异常处理的几种常用方法

一.数据库连接 1.在需要数据库连接的地方连接数据库。比如说&#xff1a; 1 publicclassSQLHleper2 {3 publicintExecuteNonQuery(stringsql)4 {5 connstr"server.;databasenewssystem;uidsa;pwd123";6 SqlConnection conn newSqlConnection(strconn);7 conn.…

java 创建线程的三种方法_java 创建线程的几种方式

说道线程&#xff0c;肯定会想到使用 java.lang.Thread.java这个类那么创建线程也主要有2种方式第一种方式&#xff1a;public class MyThread extends Thread {public void run() {System.out.println("这是MyThread线程");}}然后在调用处&#xff0c;执行start方法…

[html] 说说你对HTML5中pattern属性的理解

[html] 说说你对HTML5中pattern属性的理解 好像是判断input在输入时按下tab键跳转到下一个input的优先级个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

【iOS】从实际出发理解多线程(二)--NSThread基础操作

简介 NSthread是苹果官方提供面向对象操作线程的技术&#xff0c;简单方便&#xff0c;可以直接操作线程对象&#xff0c;不过需要自己控制线程的生命周期。在平时使用较少&#xff0c;常用的就是下面的方法来获取当前线程。 [NSThread currentThread] 使用 1.实例初始化、属性…

java readline最后一行_java – 如何在reader.readLine()中检测第一行和最后一行?

酷问题我打了一圈,这是一个SSCCE,只是copy’n’paste’n’run它.package com.stackoverflow.q2292917;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.io.PrintWriter;public class Test {public stati…

Qt中使用QSqlDatabase::removeDatabase()的正确方法

如果你用过Qt的QSqlDatabase的话&#xff0c;多半会对下面的警告信息感兴趣&#xff1a; QSqlDatabasePrivate::removeDatabase: connection qt_sql_default_connection is still in use, allqueries will cease to work. 意思是说&#xff0c;还有某查询引用默认数据库连接&qu…

[html] 你是如何区分HTML和HTML5的?

[html] 你是如何区分HTML和HTML5的&#xff1f; 通过文档类型声明&#xff1b;通过一些HTML5独有新标签&#xff1a;<date>、<email>、<url>、<video>、<section>、<canvas>等个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识…

app爬虫Android 7证书设置

环境&#xff1a;windows&#xff0c;Android sdk&#xff08;要使用adb命令&#xff09;&#xff0c;夜神模拟器&#xff08;自己创建一个Android 7 模拟器&#xff0c;设置root&#xff0c;桥接&#xff0c;wlan设置好代理&#xff09; 模拟器设置代理 如xxx.xxx.xxx.xxx:888…

java indexof效率_Java indexOf函数比Rabin-Karp更有效吗?文字搜寻效率

几周前&#xff0c;我向Stackoverflow提出了一个问题&#xff0c;该问题涉及如何创建一种有效的算法来搜索大量文本中的模式。现在&#xff0c;我正在使用String函数indexOf进行搜索。一个建议是使用Rabin-Karp作为替代方案。我编写了一些如下的测试程序&#xff0c;以测试Rabi…

双绞线制作方法和标准

双绞线的制作方法&#xff1a; 标准568B&#xff1a;橙白--1&#xff0c;橙--2&#xff0c;绿白--3&#xff0c;蓝--4&#xff0c;蓝白--5&#xff0c;绿--6&#xff0c;棕白--7&#xff0c;棕--8 (如图2&#xff09; 标准568A&#xff1a;绿白--1&#xff0c;绿--2&#xff0c…

深入理解Java枚举类型(enum)

理解枚举类型 枚举类型是Java 5中新增特性的一部分&#xff0c;它是一种特殊的数据类型&#xff0c;之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束&#xff0c;但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。下面先来看看什么是枚举…

[html] html的属性值有规定要使用单引号还是双引号吗?

[html] html的属性值有规定要使用单引号还是双引号吗&#xff1f; 使用单引号和双引号是等效的个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题