//定义事件枚举
public enum EventEnum {
PLACE_ORDER("1","下单事件"),
DS_BUYER_LOGIN("2","ds买家登录事件"),
WS_BUYER_LOGIN("3","ws买家登录事件"),
REGISTER("4","注册事件");
}
//定义handler接口
public interface IBaseHandler {
boolean match(EventEnum eventEnum);
void handle(String message);
}
//定义具体的handler
@Service
public class PlaceOrderHandler implements IBaseHandler {
@Autowired
private ScReportService scReportService;
@Override
public boolean match(EventEnum eventEnum) {
return EventEnum.PLACE_ORDER==eventEnum;
}
@Override
public void handle(String message) {
scReportService.report(JSONObject.parseObject(message,ScCommon.class));
}
}
//定义神策埋点日志上传服务类
@Service
public class SCReportMessageService {
@Autowired
private List<IBaseHandler> handlers;
public IBaseHandler getHandler(EventEnum eventEnum){
for (IBaseHandler basehandler :handlers){
if(basehandler.match(eventEnum)){
return basehandler;
}
}
throw new RuntimeException("cannot find handler");
}
//上报服务
public void report(ScCommon scCommon){
//......省略上报代码
}
//fmq消息接收
protected void handleMessage(ConsumerRecord<String, String> record) {
if(Objects.isNull(record)||Objects.isNull(record.value())){
log.error("handleMessage occur error");
return;
}
String message = record.value();
Map map = (Map) JSONObject.parseObject(message);
messageService.getHandler(EventEnum.getByType((String) map.get(EVENT_TYPE)));
}
2020-08-13
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。