|
|
@@ -0,0 +1,107 @@
|
|
|
+package com.uas.search.console.b2b.service.impl;
|
|
|
+
|
|
|
+import org.apache.log4j.Logger;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import com.uas.message.sms.service.SmsService;
|
|
|
+import com.uas.search.b2b.model.SPage;
|
|
|
+import com.uas.search.console.b2b.SystemProperties;
|
|
|
+import com.uas.search.console.b2b.dao.LuceneQueueMessageDao;
|
|
|
+import com.uas.search.console.b2b.jms.AQListener;
|
|
|
+import com.uas.search.console.b2b.model.LuceneQueueMessage;
|
|
|
+import com.uas.search.console.b2b.schedule.model.Executable;
|
|
|
+import com.uas.search.console.b2b.schedule.model.TaskInformation;
|
|
|
+import com.uas.search.console.b2b.schedule.service.TaskService;
|
|
|
+import com.uas.search.console.b2b.service.RealTimeUpdateMonitorService;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 创建定时任务,监控实时更新异常情况
|
|
|
+ *
|
|
|
+ * @author sunyj
|
|
|
+ * @since 2016年12月19日 下午3:40:03
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class RealTimeUpdateMonitorServiceImpl implements RealTimeUpdateMonitorService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TaskService taskService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private LuceneQueueMessageDao luceneQueueMessageDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SmsService smsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SystemProperties systemProperties;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上次查询时最旧的消息
|
|
|
+ */
|
|
|
+ private LuceneQueueMessage oldestMessage;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AQListener aqListener;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 两次任务之间的等待时间间隔为10分钟
|
|
|
+ */
|
|
|
+ private static final long PERIOD = 10 * 60 * 1000;
|
|
|
+
|
|
|
+ private Logger logger = Logger.getLogger(getClass());
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TaskInformation newTask() {
|
|
|
+ String title = "监控实时更新异常情况";
|
|
|
+ Executable command = new Executable() {
|
|
|
+ @Override
|
|
|
+ public void execute() {
|
|
|
+ // 如果实时更新未正常运行,发送警告短信并自动重启实时更新服务
|
|
|
+ if (!workWell()) {
|
|
|
+ logger.error("实时更新未正常运行");
|
|
|
+ sendWarnSms();
|
|
|
+ if (aqListener.isRunning()) {
|
|
|
+ aqListener.stop();
|
|
|
+ }
|
|
|
+ aqListener.start(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ TaskInformation taskInformation = new TaskInformation(title, command, 0, PERIOD);
|
|
|
+ taskService.newTask(taskInformation);
|
|
|
+ return taskInformation;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 实时更新服务是否运行良好
|
|
|
+ *
|
|
|
+ * @return true 如果运行良好
|
|
|
+ */
|
|
|
+ private boolean workWell() {
|
|
|
+ SPage<LuceneQueueMessage> sPage = luceneQueueMessageDao.findAll(1, 1, null);
|
|
|
+ // 如果消息队列中没有消息,说明没有等待更新的消息
|
|
|
+ if (sPage.getTotalElement() == 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ LuceneQueueMessage luceneQueueMessage = sPage.getContent().get(0);
|
|
|
+ if (oldestMessage == null) {
|
|
|
+ oldestMessage = luceneQueueMessage;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ // 比较上次与本次查询的最旧的消息,如果两者相同,说明实时更新服务出现了问题
|
|
|
+ if (oldestMessage.equals(luceneQueueMessage)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送警告短信
|
|
|
+ */
|
|
|
+ private void sendWarnSms() {
|
|
|
+ smsService.sendAll(systemProperties.getSmsTemplateId(), systemProperties.getSmsReceivers(),
|
|
|
+ new Object[] { "B2B实时更新服务出现问题,已经自动重启实时更新服务" });
|
|
|
+ }
|
|
|
+
|
|
|
+}
|