2020-08-13

//定义事件枚举
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)));
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。