package doumeemes.config.rocketmq.listener; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.aliyun.openservices.ons.api.Action; 
 | 
import com.aliyun.openservices.ons.api.ConsumeContext; 
 | 
import com.aliyun.openservices.ons.api.Message; 
 | 
import com.aliyun.openservices.ons.api.MessageListener; 
 | 
import doumeemes.dao.business.model.Workorder; 
 | 
import doumeemes.service.ext.WorkorderExtService; 
 | 
import org.slf4j.Logger; 
 | 
import org.slf4j.LoggerFactory; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Component; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.nio.charset.StandardCharsets; 
 | 
//@Service 
 | 
public class StatisticsMqReceiveListener implements MessageListener { 
 | 
  
 | 
    @Autowired 
 | 
    private WorkorderExtService workorderExtService; 
 | 
    private static final Logger logger = LoggerFactory.getLogger(StatisticsMqReceiveListener.class); 
 | 
  
 | 
    @Override 
 | 
    public Action consume(Message message, ConsumeContext consumeContext) { 
 | 
        try { 
 | 
            //消费消息 
 | 
            String msgTag = message.getTag(); 
 | 
            String msgBody = new String(message.getBody(), StandardCharsets.UTF_8); 
 | 
            logger.info("接收到MQ消息 -- Topic:{},tag:{},msgId:{},Key:{},body:{}", 
 | 
                    message.getTopic(), msgTag, message.getMsgID(), message.getKey(), 
 | 
                    new String(message.getBody())); 
 | 
            try { 
 | 
                Workorder model = JSONObject.toJavaObject(JSONObject.parseObject(msgBody),Workorder.class); 
 | 
                if(model != null){ 
 | 
                    workorderExtService.statisticNum(model); 
 | 
                } 
 | 
            }catch (Exception e){ 
 | 
                logger.error("------------工单及相应计划的数量统计失败---------------"+e.getMessage()); 
 | 
            } 
 | 
            //获取消息重试次数 
 | 
            int reconsumeTimes = message.getReconsumeTimes(); 
 | 
            logger.info("获取消息重试次数为:" + reconsumeTimes); 
 | 
  
 | 
            //消费成功,继续消费下一条消息 
 | 
            return Action.CommitMessage; 
 | 
        } catch (Exception e) { 
 | 
            logger.error("消费MQ消息失败! msgId:" + message.getMsgID() + " ---Exception:" + e); 
 | 
            //消费失败,告知服务器稍后再投递这条消息,继续消费其他消息 
 | 
            return Action.ReconsumeLater; 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |