`
eyeqq
  • 浏览: 6636 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

工具:任务重发器 OR 异步执行任务

阅读更多
记录一下项目中产生出来的东西。好不好另当别论,大家可以指点一二。东西没什么含量,主要是解决一个问题时产生的一些想法。希望能有更好的意见。


项目有一个小模块是用RCP来完成的。其中有一个要求就是当网络断开的时候RCP客户端提交的请求能保存下来,等网络连通之后再次发送出去。

因为我们的RCP项目都是通过webservice的方式去推他的数据的,数据的提交方式相对类似,所以打算做一个任务的重发容器。

思路是这样的,使用一个任务类Task用于记录提交失败的方法,把任务存放在一个单例TaskContainer中。然后通过手动或是定时任务去调用TaskExecutor执行未完成的任务。

Task.java记录要执行任务的信息。其中taskType是用于判断任务的类型,是webserivce还是普通service。

	private Class taskClass;
	private String methodName;
	private Object[] args;
	private Class[] params;
	private String taskType = TASK_TYPE_WEBSERVICE;


然后是TaskExecutor中执行Task的方法。很简单~~就是invoke。

	private void invokeTaskWebService(Task task) throws Exception {
		try {

			Object obj = WebServiceUtil.getService(task.getTaskClass());
			buildTaskMethod(task).invoke(obj, task.getArgs());
		} catch (TaskBuildMethodException e) {
			logger.error("创建method时出错!");
			throw e;
		} catch (Exception ex) {
			logger.error("TaskContainer执行异常");
			throw new RuntimeException();
		}
	}



主要的buildTaskMethod方法。有些特殊点的类型不能用obj.getClass()得到。

	/**
	 * 通过task得到method
	 * 
	 * @param task
	 * @return
	 */
	private Method buildTaskMethod(Task task) throws TaskBuildMethodException {
		try {
			Class[] params = new Class[task.getArgs().length];
			if (task.getParams() == null) {
				int i = 0;
				for (Object obj : task.getArgs()) {
					if (obj instanceof List) {
						params[i] = List.class;
					} else if (obj instanceof Map) {
						params[i] = Map.class;
					} else if (obj instanceof Set) {
						params[i] = Set.class;
					} else if (obj instanceof Boolean) {
						params[i] = boolean.class;
					} else {
						params[i] = obj.getClass();
					}
					i++;
				}
			}else{
				params = task.getParams();
			}
			Method method = task.getTaskClass().getMethod(task.getMethodName(),
					params);
			if (method == null) {
				throw new TaskBuildMethodException();
			}
			return method;
		} catch (Exception e) {
			throw new TaskBuildMethodException();
		}
	}


其它的一些代码就不帖了。

任务的执行可以手动也可以是定时器去跑。在RCP本地程序中我是写了一个单例的TaskTimer去跑。在服务端要用到这样的功能话就起上Quartz比较合适。

[size=medium;]其它功能:异步执行任务[/size]
这个东西做完在RCP上运行蛮不错的。在异常出现之后创建一个Task放入容器内,然后找个网络通的时候执行。
其实上面那个功能都用的不太多,后面在项目的过程中发现一个更加实用的功能。


我们的一些功能流程在走到一定的时候会要去执行一些比较耗时的任务。往往这些耗时的任务让我们的流程卡在那边不能动弹,只有执行结束之后才能继续下面的流程。(耗时任务具体为什么要消耗大量的时候就不讲了。)这些耗时任务都有一个特点。他们只是拿到当前流程的一些数据与状态,然后去跑一下。最开始有一个想法是说做一个定时器,对这个流程进行定时查看,查看有没有需要跑的状态记录。但这个是行不通的,因为我们有很多个流程需要这样的功能。就算不需要去定义多个定时器那也是需要去写多个检查方法。

所以就使用了上面所说的那个Task小工具。把过去需要调用的方法写成Task装入TaskExecutor中,然后起一个定时任务去跑容器内的Task,效果蛮不错的,解决了我们之前的问题,达到了异步执行任务的功能,而不影响当前的流程。

分享到:
评论

相关推荐

    阿里巴巴诚信通信息重发器

    阿里巴巴信息自动重发器,是针对阿里巴巴中国站诚信通会员的一款产品重发,提高产品排名的软件。重发器会按照客户指定的时间(有3种方式,来设定产品重发时间),自动重发。同时能够对产品分类,每一类的产品,在1天...

    阿里巴巴信息自动重发器

    阿里巴巴信息自动重发器,是针对阿里巴巴中国站诚信通会员的一款产品重发,提高产品排名的软件。重发器会按照客户指定的时间(有3种方式,来设定产品重发时间),自动重发。同时能够对产品分类,每一类的产品,在1天...

    Windows发包工具

    Windows发包工具,pcap数据包重发工具

    电信设备-带有信息通路失效隔离的信息通路重发器.zip

    标题中的“电信设备-带有信息通路失效隔离的信息通路重发器”指的是在电信网络中,用于处理信息传输故障并实现隔离与重发功能的一种特殊设备。这种设备的主要任务是确保信息在通信链路中稳定、可靠地传输,即使在...

    利用SharpPcap实现网络包的捕获工具,实现了端口监控,数据包捕获等功能。可以根据捕获报文,模拟连接并重发测试

    本文将深入探讨如何利用SharpPcap库来创建一个网络包捕获工具,实现端口监控、数据包捕获以及模拟连接并重发测试等功能。 SharpPcap是.NET平台上的一款强大而灵活的开源库,专门用于捕获和分析网络数据包。它提供了...

    SAF.rar_saf交易_saf机制_saf自动收礼_saf重发_saf重发机制

    SAF交易是指在特定条件下,如果一笔交易没有在预设的时间内完成或者返回结果,系统会自动执行一个安全的放弃操作,以避免交易状态悬空并保护系统的稳定性。这通常涉及到事务管理,确保交易的原子性,即要么全部完成...

    MCU初学者Uart串口操作入门程序参考-重发/超时/ACK等

    - **中断处理**:可以使用中断处理超时,当计时器溢出时触发中断,检查是否需要执行重发操作。 6. **ACK确认机制**: - **ACK帧**:在数据传输后,接收方返回一个简单的确认帧(通常是单一的ACK位,表示接收到的...

    model-cmd-manage.zip 指令重发控制器

    在IT行业中,指令重发控制器是一种关键的系统组件,它主要负责处理计算机系统中的指令执行错误或通信失败,确保指令的正确性和完整性。在“model-cmd-manage.zip 指令重发控制器”中,我们可以看到两个核心文件:`...

    阿里巴巴信息重发排名

    重发器会按照客户指定的时间(有3种方式,来设定产品重发时间),自动重发。同时能够对产品分类,每一类的产品,在1天中,设置不同的时间点来重发。因阿里巴巴搜索引擎的产品排名顺序是按照产品发布时间的先后原则,...

    阿里产品信息重发助手

    重发器会按照客户指定的时间(有3种方式,来设定产品重发时间),自动重发。同时能够对产品分类,每一类的产品,在1天中,设置不同的时间点来重发。因阿里巴巴搜索引擎的产品排名顺序是按照产品发布时间的先后原则,...

    基于现场可编程门阵列的弹载遥测记忆重发器.pdf

    基于现场可编程门阵列的弹载遥测记忆重发器.pdf

    阿里巴巴信息重发排名大师

    重发器会按照客户指定的时间(有3种方式,来设定产品重发时间),自动重发。同时能够对产品分类,每一类的产品,在1天中,设置不同的时间点来重发。因阿里巴巴搜索引擎的产品排名顺序是按照产品发布时间的先后原则,...

    协议重发&并发-自动化测试工具

    协议重发&并发-自动化测试工具 支持C/S B/S架构 1.协议只支持16进制字符串,即WPE或封包助手等工具截取的封包格式 2.最大并发 即并发连接数,最大65535 3.并发级 即每秒并发速度,1最慢 5最快 4.协议重发控制 -...

    阿里重发大师(国际版)

    强盛的信息重发:具有强盛的商机信息重发功能,支持多网站、多帐号同步重发,多线程、多任务批量生发功能。  灵活设置重发时间:可以任意设置每条信息的重发时间。更精准重发商机信息,更有效的晋升信息排名。  ...

    协议重发&并发-自动化测试工具 V0.2

    2015.11.10 协议重发&并发-自动化测试工具 支持C/S B/S架构 1.协议只支持16进制字符串,即WPE或封包助手等工具截取的封包格式 例:AA BB CC或AABBCC 2.线程并发 单进程最大并发数1500,防止有些人干坏事 3.进程...

    信息重发助手第一部分

    信息重发助手是一款针对诚信通会员、慧聪网站和阿里国际站的自动重发软件,本重发软件解除了您每天登陆网站,重发信息的苦恼,任意一条信息都可以随意定时重发,信息重发成功率接近100%,从而达到提高信息排名的目的...

    WPEPRO网络封包工具

    3. **过滤器应用**:内置强大的过滤器系统,允许用户根据特定条件筛选出需要的数据包,快速定位问题所在。 **二、封包修改与重发** 1. **数据包编辑**:用户可以对捕获到的数据包进行修改,包括修改数据包头信息、...

    专业英语词汇突破网络工程师英语词汇参照.pdf

    * ARQ: 自动重发请求,用于在数据传输中检测错误和重发数据。 * ATM: 异步传输模式,异步传输模式是一种高速网络传输模式。 二、网络协议知识点 * AAL: ATM适配层,ATM网络中的协议层。 * AC: 无连接应答帧,用于...

    电信设备-多次重发单次执行通讯系统.zip

    电信设备-多次重发单次执行通讯系统.zip

Global site tag (gtag.js) - Google Analytics