|
@@ -1,167 +1,150 @@
|
|
|
-//package com.gis.listener;
|
|
|
-//
|
|
|
-//import com.gis.constant.CmdConstant;
|
|
|
-//import com.gis.constant.ConfigConstant;
|
|
|
-//import com.gis.constant.RabbitConfig;
|
|
|
-//import com.gis.entity.FodderEntity;
|
|
|
-//import com.gis.mapper.FodderMapper;
|
|
|
-//import com.gis.service.FodderService;
|
|
|
-//import com.gis.util.CmdUtils;
|
|
|
-//import lombok.extern.slf4j.Slf4j;
|
|
|
-//import org.junit.Test;
|
|
|
-//import org.slf4j.MDC;
|
|
|
-//import org.springframework.amqp.rabbit.annotation.RabbitHandler;
|
|
|
-//import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
|
|
-//import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-//import org.springframework.stereotype.Component;
|
|
|
-//
|
|
|
-//import java.io.PrintWriter;
|
|
|
-//import java.io.StringWriter;
|
|
|
-//import java.util.Date;
|
|
|
-//import java.util.concurrent.*;
|
|
|
-//
|
|
|
-//
|
|
|
-///**
|
|
|
-// * Created by owen on 2021/12/24 0012 10:05
|
|
|
-// *
|
|
|
-// * 开启两个线程监听
|
|
|
-// */
|
|
|
-//@Slf4j
|
|
|
-//@Component
|
|
|
-//@RabbitListener(queues = RabbitConfig.PANO_QUEUE) // 指定监听队列
|
|
|
-//public class Fd720Listener_2 {
|
|
|
-//
|
|
|
-// @Autowired
|
|
|
-// ConfigConstant configConstant;
|
|
|
-//
|
|
|
-// @Autowired
|
|
|
-// FodderMapper fodderMapper;
|
|
|
-//
|
|
|
-// @Autowired
|
|
|
-// FodderService fodderService;
|
|
|
-//
|
|
|
-//
|
|
|
-// // 链路id
|
|
|
-// static String traceId;
|
|
|
-//
|
|
|
-//
|
|
|
-// @RabbitHandler
|
|
|
-// public void getMessage(Long param) {
|
|
|
-// traceId = System.currentTimeMillis()+"";
|
|
|
-// MDC.put("TRACE_ID", traceId);
|
|
|
-//
|
|
|
-// log.info("监听消息_2_start: {}, uuid: {}", param, traceId);
|
|
|
-// try {
|
|
|
-// Thread.sleep(300);
|
|
|
-// } catch (InterruptedException e) {
|
|
|
-// e.printStackTrace();
|
|
|
-// }
|
|
|
-//
|
|
|
-// processPano(param, traceId);
|
|
|
-//
|
|
|
-//
|
|
|
-// log.info("监听消息_1_end: {}, uuid: {}", param, traceId);
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * 切图会超时控制
|
|
|
-// * @param id
|
|
|
-// */
|
|
|
-// public void processPano(Long id, String traceId) {
|
|
|
-// MDC.put("TRACE_ID", traceId);
|
|
|
-//
|
|
|
-// log.info("切图流程开始 : " + id);
|
|
|
-// long start = System.currentTimeMillis();
|
|
|
-// FodderEntity entity = fodderMapper.findById(id);
|
|
|
-// if (entity == null) {
|
|
|
-// log.error("场景不存在: " + id);
|
|
|
-// // 直接结束,抛异常的话,会造成死循环,产生大量日志,而且队列也跑不下去
|
|
|
-// return;
|
|
|
-// }
|
|
|
-// String panoPath = entity.getFilePath();
|
|
|
-// String sceneCode = entity.getSceneCode();
|
|
|
-// String cmd = CmdConstant.PANO_KRPANO + panoPath;
|
|
|
-//
|
|
|
-//
|
|
|
-// // 超时处理机制
|
|
|
-// final ExecutorService exec = Executors.newFixedThreadPool(1);
|
|
|
-// Callable<String> call = new Callable<String>() {
|
|
|
-// @Override
|
|
|
-// public String call() throws Exception {
|
|
|
-// MDC.put("TRACE_ID", traceId);
|
|
|
-// CmdUtils.callLine(cmd, 200);
|
|
|
-// long end = System.currentTimeMillis();
|
|
|
-// log.info("切图完成耗时: {} s" ,(end-start)/1000);
|
|
|
-// log.warn("end processListener : "+ id);
|
|
|
-// return "执行完成";
|
|
|
-// }
|
|
|
-// };
|
|
|
-// // 超时回调
|
|
|
-// Future<String> future = exec.submit(call);
|
|
|
-// try {
|
|
|
-// String obj = future.get(10, TimeUnit.MINUTES); //任务处理超时时间设为 3分钟
|
|
|
-// entity.setStatus(3);
|
|
|
-// String tourXmlScene = fodderService.getTourXmlScene(sceneCode);
|
|
|
-// entity.setTour(tourXmlScene);
|
|
|
-// // 上传切图
|
|
|
-// uploadOss(sceneCode);
|
|
|
-// log.info("任务成功返回: " + obj);
|
|
|
-// } catch (InterruptedException e) {
|
|
|
-// e.printStackTrace();
|
|
|
-// entity.setStatus(2);
|
|
|
-// StringWriter trace=new StringWriter();
|
|
|
-// log.error(trace.toString());
|
|
|
-// log.error("异常了 InterruptedException");
|
|
|
-// } catch (ExecutionException e) {
|
|
|
-// e.printStackTrace();
|
|
|
-// StringWriter trace=new StringWriter();
|
|
|
-// e.printStackTrace(new PrintWriter(trace));
|
|
|
-// log.error("超时了 1");
|
|
|
-// // 异常日志要打印,不然不会出现在日志文件中,只会出现在控制台
|
|
|
-// log.error(trace.toString());
|
|
|
-// entity.setStatus(2);
|
|
|
-// future.cancel(true);
|
|
|
-// } catch (TimeoutException e) {
|
|
|
-// e.printStackTrace();
|
|
|
-// StringWriter trace=new StringWriter();
|
|
|
-// e.printStackTrace(new PrintWriter(trace));
|
|
|
-// log.error("超时了 2");
|
|
|
-// log.error(trace.toString());
|
|
|
-// entity.setStatus(2);
|
|
|
-// future.cancel(true);
|
|
|
-// } finally {
|
|
|
-// entity.setUpdateTime(new Date());
|
|
|
-// fodderMapper.updateByPrimaryKey(entity);
|
|
|
-// log.info("切图流程, 更新数据库完成 : " + id);
|
|
|
-// }
|
|
|
-// log.info("切图流程结束 : " + id);
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * 上传切图目录
|
|
|
-// */
|
|
|
-// private void uploadOss(String sceneCode){
|
|
|
-// String cmd = CmdConstant.OSSUTIL_UPLOAD_DIR;
|
|
|
-// cmd = cmd.replaceAll("@sceneCode", sceneCode);
|
|
|
-// log.info("ossCmd: " + cmd);
|
|
|
-// long start = System.currentTimeMillis();
|
|
|
-// CmdUtils.callshell(cmd);
|
|
|
-// long end = System.currentTimeMillis();
|
|
|
-// log.info("切图上传完成, 耗时:{} s" , (end-start)/1000 );
|
|
|
-// }
|
|
|
-//
|
|
|
-// @Test
|
|
|
-// public void test(){
|
|
|
-// CmdUtils.callshell("ipconfig");
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//}
|
|
|
+package com.gis.listener;
|
|
|
+
|
|
|
+import com.gis.constant.CmdConstant;
|
|
|
+import com.gis.constant.ConfigConstant;
|
|
|
+import com.gis.constant.RabbitConfig;
|
|
|
+import com.gis.entity.FodderEntity;
|
|
|
+import com.gis.exception.BaseRuntimeException;
|
|
|
+import com.gis.mapper.FodderMapper;
|
|
|
+import com.gis.service.FodderService;
|
|
|
+import com.gis.util.CmdUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.junit.Test;
|
|
|
+import org.slf4j.MDC;
|
|
|
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
|
|
|
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.io.PrintWriter;
|
|
|
+import java.io.StringWriter;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.concurrent.*;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by owen on 2021/12/24 0012 10:05
|
|
|
+ *
|
|
|
+ * 开启两个线程监听
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+@RabbitListener(queues = RabbitConfig.PANO_QUEUE) // 指定监听队列
|
|
|
+public class Fd720Listener_2 {
|
|
|
+
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ FodderMapper fodderMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ FodderService fodderService;
|
|
|
+
|
|
|
+
|
|
|
+ // 链路id
|
|
|
+ static String traceId;
|
|
|
+
|
|
|
+
|
|
|
+ @RabbitHandler
|
|
|
+ public void getMessage(Long param) {
|
|
|
+ traceId = System.currentTimeMillis()+"";
|
|
|
+ MDC.put("TRACE_ID", traceId);
|
|
|
+
|
|
|
+ log.info("监听消息_2_start: {}, uuid: {}", param, traceId);
|
|
|
+ try {
|
|
|
+ Thread.sleep(300);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ processPano(param, traceId);
|
|
|
+
|
|
|
+
|
|
|
+ log.info("监听消息_2_end: {}, uuid: {}", param, traceId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 切图会超时控制
|
|
|
+ * @param id
|
|
|
+ */
|
|
|
+ public void processPano(Long id, String traceId) {
|
|
|
+ MDC.put("TRACE_ID", traceId);
|
|
|
+
|
|
|
+ log.info("切图流程开始 : " + id);
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
+ FodderEntity entity = fodderMapper.findById(id);
|
|
|
+ if (entity == null) {
|
|
|
+ log.error("场景不存在: " + id);
|
|
|
+ // 直接结束,抛异常的话,会造成死循环,产生大量日志,而且队列也跑不下去
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String panoPath = entity.getFilePath();
|
|
|
+ String sceneCode = entity.getSceneCode();
|
|
|
+ String cmd = CmdConstant.PANO_KRPANO + panoPath;
|
|
|
+
|
|
|
+
|
|
|
+ // 超时处理机制
|
|
|
+ final ExecutorService exec = Executors.newFixedThreadPool(1);
|
|
|
+ Callable<String> call = new Callable<String>() {
|
|
|
+ @Override
|
|
|
+ public String call() throws Exception {
|
|
|
+ MDC.put("TRACE_ID", traceId);
|
|
|
+ CmdUtils.callLine(cmd, 200);
|
|
|
+ long end = System.currentTimeMillis();
|
|
|
+ log.info("切图完成耗时: {} s" ,(end-start)/1000);
|
|
|
+ log.warn("end processListener : "+ id);
|
|
|
+ return "执行完成";
|
|
|
+ }
|
|
|
+ };
|
|
|
+ // 超时回调
|
|
|
+ Future<String> future = exec.submit(call);
|
|
|
+ try {
|
|
|
+ String obj = future.get(10, TimeUnit.MINUTES); //任务处理超时时间设为 3分钟
|
|
|
+ entity.setStatus(3);
|
|
|
+ String tourXmlScene = fodderService.getTourXmlScene(sceneCode);
|
|
|
+ entity.setTour(tourXmlScene);
|
|
|
+ // 上传切图
|
|
|
+ fodderService.uploadOss(sceneCode);
|
|
|
+ log.info("任务成功返回: " + obj);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ entity.setStatus(2);
|
|
|
+ StringWriter trace=new StringWriter();
|
|
|
+ log.error(trace.toString());
|
|
|
+ log.error("异常了 InterruptedException");
|
|
|
+ } catch (ExecutionException | BaseRuntimeException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ StringWriter trace=new StringWriter();
|
|
|
+ e.printStackTrace(new PrintWriter(trace));
|
|
|
+ log.error("超时了 1");
|
|
|
+ // 异常日志要打印,不然不会出现在日志文件中,只会出现在控制台
|
|
|
+ log.error(trace.toString());
|
|
|
+ entity.setStatus(2);
|
|
|
+ future.cancel(true);
|
|
|
+ } catch (TimeoutException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ StringWriter trace=new StringWriter();
|
|
|
+ e.printStackTrace(new PrintWriter(trace));
|
|
|
+ log.error("超时了 2");
|
|
|
+ log.error(trace.toString());
|
|
|
+ entity.setStatus(2);
|
|
|
+ future.cancel(true);
|
|
|
+ } finally {
|
|
|
+ entity.setUpdateTime(new Date());
|
|
|
+ fodderMapper.updateByPrimaryKey(entity);
|
|
|
+ log.info("切图流程, 更新数据库完成 : " + id);
|
|
|
+ }
|
|
|
+ log.info("切图流程结束 : " + id);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|