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;
|
2018-12-26 17:16:02 +08:00
|
|
|
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;
|
2019-04-30 17:31:56 +08:00
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
2018-12-03 10:44:14 +08:00
|
|
|
import org.springframework.stereotype.Service;
|
2019-04-30 17:31:56 +08:00
|
|
|
import org.springframework.util.StringUtils;
|
2018-12-03 10:44:14 +08:00
|
|
|
|
2018-12-06 14:35:12 +08:00
|
|
|
import com.gzzn.omms.msgexchangeapi.entity.Cminmsg;
|
2019-01-08 15:44:59 +08:00
|
|
|
import com.gzzn.omms.msgexchangeapi.entity.CminmsgWapper;
|
2018-12-07 15:29:28 +08:00
|
|
|
import com.gzzn.omms.msgexchangeapi.entity.msg.MSG;
|
2018-12-26 17:16:02 +08:00
|
|
|
import com.gzzn.omms.msgexchangeapi.service.ICminmsgService;
|
2018-12-07 15:29:28 +08:00
|
|
|
import com.gzzn.omms.msgexchangeapi.service.exchange.IExchangeService;
|
2018-12-03 10:44:14 +08:00
|
|
|
|
2018-12-06 16:38:47 +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;
|
|
|
|
|
|
2018-12-26 17:16:02 +08:00
|
|
|
@Autowired
|
|
|
|
|
ICminmsgService cminmsgService;
|
|
|
|
|
|
2019-04-30 17:31:56 +08:00
|
|
|
@Value("${msgExchange.ignoreMsg}")
|
|
|
|
|
private String ignoreMsg;
|
|
|
|
|
|
2018-12-06 14:35:12 +08:00
|
|
|
public HandlerResult dispatch(Cminmsg cminmsg)
|
2018-12-03 10:44:14 +08:00
|
|
|
{
|
2018-12-04 11:37:45 +08:00
|
|
|
try
|
|
|
|
|
{
|
2019-01-08 15:44:59 +08:00
|
|
|
//
|
2019-01-08 14:56:52 +08:00
|
|
|
MSG msg = exchangeService.xmlToMsg(cminmsg.getCminmsgsClobMsg());
|
2019-01-08 15:44:59 +08:00
|
|
|
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();
|
2019-04-30 17:31:56 +08:00
|
|
|
if(!isNeedHandler(type,subType))
|
|
|
|
|
{
|
|
|
|
|
logger.error("消息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();
|
2019-01-08 15:44:59 +08:00
|
|
|
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) {
|
2018-12-26 17:16:02 +08:00
|
|
|
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
|
|
|
|
|
|
2019-04-30 17:31:56 +08:00
|
|
|
/**
|
|
|
|
|
* 是否需要处理该消息
|
|
|
|
|
* @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
|
|
|
}
|