Files
msgexchange-api/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/MsgHandlerDispatcher.java
T

116 lines
3.7 KiB
Java
Raw Normal View History

2018-12-03 10:44:14 +08:00
package com.gzzn.omms.msgexchangeapi.msghandler;
2018-12-04 11:37:45 +08:00
import java.lang.reflect.Method;
import java.util.Arrays;
2018-12-03 10:44:14 +08:00
2018-12-05 18:05:50 +08:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2018-12-03 10:44:14 +08:00
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
2018-12-03 10:44:14 +08:00
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
2018-12-03 10:44:14 +08:00
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;
2018-12-03 10:44:14 +08:00
@Service("msgHandlerDispatcher")
2018-12-03 10:44:14 +08:00
public class MsgHandlerDispatcher {
2018-12-05 18:05:50 +08:00
private Logger logger = LoggerFactory.getLogger(MsgHandlerDispatcher.class);
2018-12-03 10:44:14 +08:00
@Autowired
IExchangeService exchangeService;
@Autowired
ICminmsgService cminmsgService;
@Value("${msgExchange.ignoreMsg}")
private String ignoreMsg;
public HandlerResult dispatch(Cminmsg cminmsg)
2018-12-03 10:44:14 +08:00
{
2018-12-04 11:37:45 +08:00
try
{
//
MSG msg = exchangeService.xmlToMsg(cminmsg.getCminmsgsClobMsg());
CminmsgWapper cminmsgWapper = new CminmsgWapper(cminmsg);
cminmsgWapper.setMsg(msg);
2018-12-10 18:17:50 +08:00
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();
}
2018-12-10 18:17:50 +08:00
2018-12-04 11:37:45 +08:00
Class clazzHandler = Class.forName(getHandlerClassName(type,subType));
Object classObject = clazzHandler.newInstance();
Method runMethod = clazzHandler.getMethod("run", CminmsgWapper.class);
2019-01-08 15:52:29 +08:00
HandlerResult result = (HandlerResult) runMethod.invoke(classObject, cminmsgWapper);
2018-12-04 11:37:45 +08:00
return result;
2018-12-10 17:21:18 +08:00
} 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());
}
2018-12-05 18:05:50 +08:00
return HandlerResult.failure();
2018-12-04 11:37:45 +08:00
}
}//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(".");
2018-12-04 14:53:50 +08:00
buffer.append(type.toLowerCase());
2018-12-04 11:37:45 +08:00
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
2018-12-03 10:44:14 +08:00
}