|
@@ -1,100 +0,0 @@
|
|
|
-package com.uas.search.service.impl;
|
|
|
|
|
-
|
|
|
|
|
-import com.uas.search.constant.model.SPage;
|
|
|
|
|
-import com.uas.search.jms.JmsListener;
|
|
|
|
|
-import com.uas.search.jms.LuceneMessage;
|
|
|
|
|
-import com.uas.search.schedule.TaskInformation;
|
|
|
|
|
-import com.uas.search.schedule.Executable;
|
|
|
|
|
-import com.uas.search.schedule.TaskService;
|
|
|
|
|
-import com.uas.search.jms.LuceneMessageService;
|
|
|
|
|
-import com.uas.search.service.RealTimeUpdateMonitorService;
|
|
|
|
|
-import com.uas.search.util.CollectionUtils;
|
|
|
|
|
-import org.slf4j.Logger;
|
|
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
|
|
-
|
|
|
|
|
-import java.sql.SQLRecoverableException;
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 创建定时任务,监控实时更新异常情况
|
|
|
|
|
- *
|
|
|
|
|
- * @author sunyj
|
|
|
|
|
- * @since 2016年12月19日 下午3:40:03
|
|
|
|
|
- */
|
|
|
|
|
-@Service
|
|
|
|
|
-public class RealTimeUpdateMonitorServiceImpl implements RealTimeUpdateMonitorService {
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 第一次执行的延迟时间间隔为1秒
|
|
|
|
|
- */
|
|
|
|
|
- private static final long INITIAL_DELAY = 1000;
|
|
|
|
|
- /**
|
|
|
|
|
- * 两次任务之间的等待时间间隔为5分钟
|
|
|
|
|
- */
|
|
|
|
|
- private static final long INTERVAL = 5 * 60 * 1000;
|
|
|
|
|
- @Autowired
|
|
|
|
|
- private TaskService taskService;
|
|
|
|
|
-
|
|
|
|
|
- @Autowired
|
|
|
|
|
- private LuceneMessageService luceneMessageService;
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 上次查询时最旧的消息
|
|
|
|
|
- */
|
|
|
|
|
- private LuceneMessage oldestMessage;
|
|
|
|
|
- @Autowired
|
|
|
|
|
- private JmsListener jmsListener;
|
|
|
|
|
- private Logger logger = LoggerFactory.getLogger(getClass());
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public TaskInformation newTask() {
|
|
|
|
|
- String title = "监控实时更新异常情况";
|
|
|
|
|
- Executable command = new Executable() {
|
|
|
|
|
- @Override
|
|
|
|
|
- public String execute() {
|
|
|
|
|
- // 如果实时更新未正常运行,发送警告短信并自动重启实时更新服务
|
|
|
|
|
- try {
|
|
|
|
|
- if (!workWell()) {
|
|
|
|
|
- logger.error("实时更新未正常运行");
|
|
|
|
|
- logger.info("发送警告短信...");
|
|
|
|
|
- if (jmsListener.isRunning()) {
|
|
|
|
|
- jmsListener.stop();
|
|
|
|
|
- }
|
|
|
|
|
- jmsListener.start(null);
|
|
|
|
|
- return "异常";
|
|
|
|
|
- }
|
|
|
|
|
- } catch (SQLRecoverableException e) {
|
|
|
|
|
- logger.error("", e);
|
|
|
|
|
- return "数据库连接错误";
|
|
|
|
|
- }
|
|
|
|
|
- return "正常";
|
|
|
|
|
- }
|
|
|
|
|
- };
|
|
|
|
|
- TaskInformation taskInformation = new TaskInformation(title, command, INITIAL_DELAY, INTERVAL, TaskInformation.ScheduleType.FixedDelay);
|
|
|
|
|
- taskService.newTask(taskInformation);
|
|
|
|
|
- return taskInformation;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 实时更新服务是否运行良好
|
|
|
|
|
- *
|
|
|
|
|
- * @return true 如果运行良好
|
|
|
|
|
- */
|
|
|
|
|
- private boolean workWell() throws SQLRecoverableException {
|
|
|
|
|
- SPage<LuceneMessage> sPage = luceneMessageService.findAll(1, 1);
|
|
|
|
|
- // 如果消息队列中没有消息,说明没有等待更新的消息
|
|
|
|
|
- if (CollectionUtils.isEmpty(sPage.getContent())) {
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
- LuceneMessage luceneMessage = sPage.getContent().get(0);
|
|
|
|
|
- // 比较上次与本次查询的最旧的消息,如果两者相同,说明实时更新服务出现了问题
|
|
|
|
|
- if (oldestMessage != null && oldestMessage.equals(luceneMessage)) {
|
|
|
|
|
- return false;
|
|
|
|
|
- } else {
|
|
|
|
|
- oldestMessage = luceneMessage;
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-}
|
|
|