ソースを参照

工单状态消息使用byte数组接收

lixing 3 年 前
コミット
e83897a2d1

+ 13 - 5
AlarmDataStarter/src/main/java/com/persagy/apm/energyalarmstarter/alarmdata/mq/OrderMsgHandler.java

@@ -50,11 +50,19 @@ public class OrderMsgHandler {
         return BindingBuilder.bind(orderStateQueue()).to(orderStateExchange());
     }
 
-    @RabbitListener(queues = "order_state_queue")    //监听器监听指定的Queue
-    public void processOrderState(String message, Channel channel, Message msg) {
-        log.info("============================== Receive:" + message);
+    /**
+     * 工单传过来的是一个字符串消息,alarmDataStarter中注册了一个Jackson2JsonMessageConverter的消息转换器
+     * 它会将字符串消息转换为byte数组,如果消息的类型为json,它会将消息转换为对象
+     *
+     * @author lixing
+     * @version V1.0 2021/11/22 10:06 下午
+     */
+    @RabbitListener(queues = "order_state_queue")
+    public void processOrderState(byte[] message, Channel channel, Message msg) {
+        String messageStr = new String(message);
+        log.info("============================== Receive:" + messageStr);
         try {
-            OrderStateMessage orderStateMessage = StringUtil.transferItemToDTO(message, OrderStateMessage.class);
+            OrderStateMessage orderStateMessage = StringUtil.transferItemToDTO(messageStr, OrderStateMessage.class);
             log.info("currentThread:{}", Thread.currentThread().getId());
             log.info("order_id: {}", orderStateMessage.getOrder_id());
             log.info("order_state: {}", orderStateMessage.getOrder_state());
@@ -63,7 +71,7 @@ public class OrderMsgHandler {
             // 手动确认消息已消费
             channel.basicAck(msg.getMessageProperties().getDeliveryTag(),false);
         } catch (Exception e) {
-            log.error("工单状态消息消费失败: {}", e.getMessage());
+            log.error("工单状态消息消费失败", e);
             try {
                 // 将消费失败的消息移除消息队列,避免重复消费
                 channel.basicReject(msg.getMessageProperties().getDeliveryTag(),false);

+ 4 - 6
AlarmDataStarter/src/main/java/com/persagy/apm/energyalarmstarter/alarmdata/service/OrderStateChangeService.java

@@ -1,7 +1,5 @@
 package com.persagy.apm.energyalarmstarter.alarmdata.service;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
 import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmrecord.QueryAlarmRecordDTO;
@@ -22,7 +20,7 @@ import java.util.List;
  * @version: V1.0
  **/
 @Service
-public class OrderStateChangeService  {
+public class OrderStateChangeService {
     @Autowired
     private AlarmRecordServiceImpl alarmRecordService;
 
@@ -49,7 +47,7 @@ public class OrderStateChangeService  {
         // 更新报警记录状态
         for (AlarmRecordItem alarmRecord : alarmRecords) {
             // 如果报警记录中工单状态已经为处理完成,不再更新报警
-            if (workOrderDone(Integer.valueOf(alarmRecord.getOrderState()))) {
+            if (alarmRecord.getOrderState() != null && workOrderDone(Integer.valueOf(alarmRecord.getOrderState()))) {
                 continue;
             }
 
@@ -67,7 +65,7 @@ public class OrderStateChangeService  {
      *
      * @param workOrderState
      * @return boolean
-     * @exception
+     * @throws
      * @author lixing
      * @version V1.0 2021/9/14 6:02 下午
      */
@@ -75,7 +73,7 @@ public class OrderStateChangeService  {
         if (workOrderState == null) {
             return false;
         }
-        switch (workOrderState){
+        switch (workOrderState) {
             case 7:
             case 8:
             case 9: