package com.github.ltsopensource.jobtracker.complete.biz; import com.github.ltsopensource.core.protocol.command.JobCompletedRequest; import com.github.ltsopensource.core.protocol.command.JobPushRequest; import com.github.ltsopensource.core.support.JobDomainConverter; import com.github.ltsopensource.jobtracker.domain.JobTrackerAppContext; import com.github.ltsopensource.jobtracker.sender.JobSender; import com.github.ltsopensource.queue.domain.JobPo; import com.github.ltsopensource.remoting.protocol.RemotingCommand; import com.github.ltsopensource.remoting.protocol.RemotingProtos; import java.util.List; /** * 接受新任务Chain * * @author Robert HG (254963746@qq.com) on 11/11/15. */ public class PushNewJobBiz implements JobCompletedBiz { private JobTrackerAppContext appContext; public PushNewJobBiz(JobTrackerAppContext appContext) { this.appContext = appContext; } @Override public RemotingCommand doBiz(JobCompletedRequest request) { // 判断是否接受新任务 if (request.isReceiveNewJob()) { try { // 查看有没有其他可以执行的任务 JobPushRequest jobPushRequest = getNewJob(request.getNodeGroup(), request.getIdentity()); // 返回 新的任务 return RemotingCommand.createResponseCommand(RemotingProtos.ResponseCode.SUCCESS.code(), jobPushRequest); } catch (Exception ignored) { } } return null; } /** * 获取新任务去执行 */ private JobPushRequest getNewJob(String taskTrackerNodeGroup, String taskTrackerIdentity) { JobSender.SendResult sendResult = appContext.getJobSender().send(taskTrackerNodeGroup, taskTrackerIdentity, 1, new JobSender.SendInvoker() { @Override public JobSender.SendResult invoke(List<JobPo> jobPos) { JobPushRequest jobPushRequest = appContext.getCommandBodyWrapper().wrapper(new JobPushRequest()); jobPushRequest.setJobMetaList(JobDomainConverter.convert(jobPos)); return new JobSender.SendResult(true, jobPushRequest); } }); if (sendResult.isSuccess()) { return (JobPushRequest) sendResult.getReturnValue(); } return null; } }