package com.back.verticle; import static com.back.model.quartz.DispatchJob.EVENTBUS; import static com.back.model.quartz.DispatchJob.PARAM; import static com.back.model.quartz.DispatchJob.VERTICLECLASS; import java.sql.Timestamp; import java.text.ParseException; import java.util.Date; import java.util.concurrent.atomic.AtomicInteger; import org.apache.http.client.utils.DateUtils; import org.quartz.JobDataMap; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.impl.JobDetailImpl; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.triggers.CronTriggerImpl; import org.quartz.impl.triggers.SimpleTriggerImpl; import com.back.extend.ProtobufObject; import com.back.inject.ConfigUtils; import com.back.model.AppTask; import com.back.model.ScheduleType; import com.back.model.quartz.DispatchJob; import com.back.util.DateUtil; import com.back.util.JsonUtils; import com.fasterxml.jackson.databind.JsonNode; import io.vertx.core.AbstractVerticle; import io.vertx.core.Handler; import io.vertx.core.eventbus.EventBus; import io.vertx.core.eventbus.Message; public class TaskVerticle extends AbstractVerticle{ private final static String address = ConfigUtils.ignite.cluster().localNode().id().toString() + TaskVerticle. class .getSimpleName(); private final static String publicAddress = TaskVerticle. class .getSimpleName(); private Scheduler scheduler; private AtomicInteger counter = new AtomicInteger(); @Override public void start() throws Exception { super .start(); this .scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); EventBus eventBus = vertx.eventBus(); eventBus.consumer(address , new Handler<Message<ProtobufObject>>(){ public void handle(Message<ProtobufObject> event) { handlerMessage(event); } }); } private void handlerMessage(Message<ProtobufObject> event) { if (event == null ){ //抛出异常 } AppTask task = (AppTask)event.body().getObject(); Long id = task.getId(); String paramJson = task.getParamJson(); String jobKey = id == null ? "appJob-" + this .counter.incrementAndGet() : id+ "" ; JobDetailImpl jobDetail = new JobDetailImpl(); jobDetail.setJobClass(DispatchJob. class ); jobDetail.setKey( new JobKey(jobKey)); JobDataMap jobDataMap = new JobDataMap(); jobDataMap.put(EVENTBUS, vertx.eventBus()); jobDataMap.put(VERTICLECLASS, JobVerticle. class ); jobDataMap.put(PARAM, paramJson); jobDetail.setJobDataMap(jobDataMap); JsonNode jsonNode = JsonUtils.getJsonNode(paramJson); ScheduleType type = ScheduleType.valueOf(task.getScheduleType()); if (type == ScheduleType.CRON){ CronTriggerImpl cronTrigger = new CronTriggerImpl(); cronTrigger.setName(id+ "" ); try { cronTrigger.setCronExpression(jsonNode.get( "cron" ).asText()); } catch (ParseException e1) { e1.printStackTrace(); } try { scheduler.scheduleJob(jobDetail, cronTrigger); } catch (SchedulerException e) { e.printStackTrace(); } } else { SimpleTriggerImpl simpleTrigger = new SimpleTriggerImpl(); simpleTrigger.setName(id+ "" ); Date date = DateUtils.parseDate(jsonNode.get( "startTime" ).asText()); simpleTrigger.setStartTime(date); int day = jsonNode.get( "interval" ).asInt(); simpleTrigger.setRepeatInterval(day * 24 * 60 * 60 * 1000 ); try { scheduler.scheduleJob(jobDetail, simpleTrigger); } catch (SchedulerException e) { e.printStackTrace(); } } } } |