NutzCN Logo
问答 异步怎么玩儿的
发布于 3166天前 作者 Kerbores 2442 次浏览 复制 上一个帖子 下一个帖子
标签:

主模块 IOC

@IocBy(type = ComboIocProvider.class, args = { "*anno", "com.kerbores", "*tx",
		"*js", "ioc", "*async", "*com.kerbores.quartz.QuartzIocLoader", "quartz" })

异步方法

package com.kerbores.onekey.tasks;

import org.hyperic.sigar.Sigar;
import org.nutz.aop.interceptor.async.Async;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import com.kerbores.onkey.bean.apm.APMAlarm;
import com.kerbores.onkey.bean.apm.APMAlarm.Type;
import com.kerbores.sigar.gathers.CPUGather;
import com.kerbores.sigar.gathers.MemoryGather;
import com.kerbores.utils.common.Ips;

/**
 * @author Kerbores(kerbores@gmail.com)
 *
 * @project app
 *
 * @file APMTask.java
 *
 * @description // TODO write some description of this class
 *
 * @time 2016年3月15日 上午11:54:46
 *
 */
@IocBean(name = "apmTask", fields = "dao")
public class APMTask implements Job {
	private static Log LOG = Logs.getLog(APMTask.class);
	private Dao dao;

	/**
	 * 
	 */
	public APMTask() {
	}

	public APMTask(Dao dao) {
		this.dao = dao;
	}

	public Dao getDao() {
		return dao;
	}

	public void setDao(Dao dao) {
		this.dao = dao;
	}

	public String hostIp = Ips.hostIp();

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
	 */
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		Sigar sigar = new Sigar();
		MemoryGather memory = MemoryGather.init(sigar);
		// 内存
		double jvmUsage, ramUsage, swapUsage;
		if ((jvmUsage = memory.getJvm().getUsage()) > 60) {
			alarm(Type.MEM, String.format("内存警告:当前 JVM 内存使用率 %f,高于预警值 %f", jvmUsage, 60f));
		}
		if ((ramUsage = memory.getRam().getUsage()) > 60) {
			alarm(Type.MEM, String.format("内存警告:当前 RAM 内存使用率 %f,高于预警值 %f", ramUsage, 60f));
		}
		if ((swapUsage = memory.getSwap().getUsage()) > 30) {
			alarm(Type.MEM, String.format("内存警告:当前 SWAP 内存使用率 %f,高于预警值 %f", swapUsage, 30f));
		}

		CPUGather cpu = CPUGather.init(sigar);

		// CPU
		double cpuUsage;
		if ((cpuUsage = cpu.getTotal().getDouble("usage")) > 75) {
			alarm(Type.CPU, String.format("CPU警告:当前 CPU 使用率 %f,高于预警值 %f", cpuUsage, 75f));
		}

		// 磁盘

		// 网络
	}

	/**
	 * 
	 * @param type
	 * @param msg
	 */
	@Async
	public void alarm(Type type, String msg) {
		APMAlarm alarm = new APMAlarm();
		alarm.setType(type);
		alarm.setMsg(msg);
		alarm.setIp(hostIp);
		if (dao == null) {
			LOG.debug(alarm);
		} else {
			dao.insert(alarm);
		}
	}
}

但是没有生效

3 回复

根据什么得出没有生效呢? alarm方法debug看看,应该会在另外一个线程里面

异步
打了断点玩儿了下,顺序执行 ,放开断点执行 2一直在1之前打印

关键还是看堆栈,看看有无被aop化

添加回复
请先登陆
回到顶部