package com.gzzn.omms.msgexchangeapi.msghandler; import java.lang.reflect.Method; import java.util.Arrays; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.gzzn.omms.msgexchangeapi.entity.Cminmsg; import com.gzzn.omms.msgexchangeapi.entity.CminmsgWapper; import com.gzzn.omms.msgexchangeapi.entity.msg.MSG; import com.gzzn.omms.msgexchangeapi.service.ICminmsgService; import com.gzzn.omms.msgexchangeapi.service.exchange.IExchangeService; @Service("msgHandlerDispatcher") public class MsgHandlerDispatcher { private Logger logger = LoggerFactory.getLogger(MsgHandlerDispatcher.class); @Autowired IExchangeService exchangeService; @Autowired ICminmsgService cminmsgService; @Value("${msgExchange.ignoreMsg}") private String ignoreMsg; public HandlerResult dispatch(Cminmsg cminmsg) { try { // MSG msg = exchangeService.xmlToMsg(cminmsg.getCminmsgsClobMsg()); CminmsgWapper cminmsgWapper = new CminmsgWapper(cminmsg); cminmsgWapper.setMsg(msg); String type = msg.getMETA().getTYPE().name(); String subType = msg.getMETA().getSTYP().name(); if(!isNeedHandler(type,subType)) { cminmsgService.updateBatchProcessed(Arrays.asList(cminmsg));//更新为已处理 logger.warn("消息type:{},subtype:{},设置不需要处理!",type,subType); return HandlerResult.success(); } Class clazzHandler = Class.forName(getHandlerClassName(type,subType)); Object classObject = clazzHandler.newInstance(); Method runMethod = clazzHandler.getMethod("run", CminmsgWapper.class); HandlerResult result = (HandlerResult) runMethod.invoke(classObject, cminmsgWapper); return result; } catch (Exception e) { try { cminmsgService.updateBatchProcessed(Arrays.asList(cminmsg));//更新为已处理 logger.error("消息处理失败msg:{},err:{}",cminmsg.getCminmsgsClobMsg(),e.getMessage()); } catch (Exception e1) { logger.error("消err:{}",e1.getMessage()); } return HandlerResult.failure(); } }//end function /** * 获取handler 类的名称 * @param type * @param subType * @return */ private String getHandlerClassName(String type , String subType) { StringBuffer buffer = new StringBuffer(); buffer.append("com.gzzn.omms.msgexchangeapi.msghandler" ); buffer.append("."); buffer.append(type.toLowerCase()); buffer.append("."); buffer.append(subType); buffer.append("Handler"); return buffer.toString(); } //end function /** * 是否需要处理该消息 * @param type 消息主类型 * @param subType 消息子类型 * @return true 需要处理 ,false 不需要处理 */ private boolean isNeedHandler(String type,String subType) { if(StringUtils.isEmpty(ignoreMsg)) { return true;// 所有消息均需要处理 } // String typeToken = type + "-" + subType; String typeTokenStar = type + "-*"; String ignoreMsgs[] = ignoreMsg.split(","); for (String msg : ignoreMsgs) { if(typeToken.equalsIgnoreCase(msg) || typeTokenStar.equalsIgnoreCase(msg)) { return false; //不需要处理的消息逻辑 } } return true; } //end function }