接收平臺訊息,模板模式實踐
阿新 • • 發佈:2021-09-15
接收平臺訊息,模板模式實踐
模板抽象類
@Service public abstract class BaseMessageService { private static final Logger logger = LoggerFactory.getLogger(KwaiOrderMessageService.class); /** * Description: 資料處理 * Date: 2021/9/15 11:17 * @Author: wangwenying10 * @Param: [parentMessage] * @Return: com.gome.retail.boot.model.Response<java.lang.Boolean> */ protected abstract Response<Boolean> dataHandle(KwaiParentMessage parentMessage); /** * Description: 任務執行 先處理資料再進行業務處理 * Date: 2021/9/15 11:13 * @Author: wangwenying10 * @Param: [parentMessage] * @Return: com.gome.retail.boot.model.Response<java.lang.Boolean> */ public Response<Boolean> execute(KwaiParentMessage parentMessage) { Response<Boolean> kwaiParentMessageResponse = dataHandle(parentMessage); if (!kwaiParentMessageResponse.isOk()) { logger.error(kwaiParentMessageResponse.getMsg()); return Response.fail("引數解析失敗"); } return bussiness(parentMessage); } /** * Description: 業務處理 * Date: 2021/9/15 11:17 * @Author: wangwenying10 * @Param: [parentMessage] * @Return: com.gome.retail.boot.model.Response<java.lang.Boolean> */ protected abstract Response<Boolean> bussiness(KwaiParentMessage parentMessage); }
繼承模板類的子類
@KwaiEvent({"kwaishop_order_statusChange"}) @Service public class KwaiOrderMessageService extends BaseMessageService { private static final Logger logger = LoggerFactory.getLogger(KwaiOrderMessageService.class); @Resource private KwaiApiService kwaiApiService; @Resource private KwaiExtchCfgService kwaiExtchCfgService; @Resource private KwaiMcoOrderService kwaiMcoOrderService; @Override protected Response<Boolean> dataHandle(KwaiParentMessage parentMessage) { try { if (StringUtils.isEmpty(parentMessage.getInfo())) { return Response.fail("缺少訊息體"); } KwaiMessageOrder kwaiMessageOrder = JSON.parseObject(parentMessage.getInfo(), KwaiMessageOrder.class); parentMessage.setKwaiMessage(kwaiMessageOrder); } catch (Exception e) { logger.error("引數解析失敗message:{}", JSON.toJSONString(parentMessage), e); return Response.fail("引數解析失敗"); } return Response.ok(); } @Override protected Response<Boolean> bussiness(KwaiParentMessage parentMessage) { KwaiExtchCfg kwaiExtchCfg = kwaiExtchCfgService.obtainCacheExtchCfg(String.valueOf(parentMessage.getUserId())); KwaiMessageOrder kwaiMessageOrder = (KwaiMessageOrder) parentMessage.getKwaiMessage(); logger.info("訊息單個訂單獲取 oid:{}", kwaiMessageOrder.getOid()); OpenSellerOrderDetailResponse response = kwaiApiService.orderInfoGet(kwaiMessageOrder.getOid(), kwaiExtchCfg); logger.info("訊息單個訂單獲取返回 oid:{} response:{}", kwaiMessageOrder.getOid(), JSON.toJSONString(response)); if (response.isSuccess() && null != response.getData()) { Response<Boolean> singleResponse = kwaiMcoOrderService.singleOrder(response.getData(), kwaiExtchCfg); logger.info("訊息單個訂單處理結果oid:{}, res:{}", kwaiMessageOrder.getOid(), JSON.toJSONString(singleResponse)); } return Response.ok(); } }
實現類快取
@Component public class KwaiAcceptServiceFactory { private static final Logger logger = LoggerFactory.getLogger(KwaiAcceptServiceFactory.class); /** * 訊息service登錄檔 */ private Map<String, BaseMessageService> messageServiceMap; @PostConstruct private void init() { messageServiceMap = new HashMap<>(); initMessageService(); } /** * 初始化service登錄檔 */ private void initMessageService() { Map<String, BaseMessageService> result = SpringBeanUtil.getApplicationContext().getBeansOfType(BaseMessageService.class); if (CollectionUtils.isEmpty(result)) { logger.warn("初始化獲取失敗,沒有發現策略實現 bean。"); throw new RuntimeException("初始化訊息處理類失敗"); } for (Map.Entry<String, BaseMessageService> entry : result.entrySet()) { String beanName = entry.getKey(); BaseMessageService value = entry.getValue(); KwaiEvent dataAnnotation = value.getClass().getAnnotation(KwaiEvent.class); if (null != dataAnnotation) { for (String string : dataAnnotation.value()) { messageServiceMap.put(string, value); } } else { logger.info("初始化,operateType is null, bean:{}", beanName); } } } /** * Description: 獲取訊息處理類 * Date: 2021/9/14 19:21 * * @Author: wangwenying10 * @Param: [operateType] * @Return: cn.com.gome.scot.alamein.mco.kwai.job.business.domain.message.BaseMessageService */ public BaseMessageService obtainMessageService(String operateType) { if (operateType == null) { logger.error("[McoServiceFactory.getExtchDataSaveService] the input param is null, return [null]."); return null; } return messageServiceMap.get(operateType); } }
呼叫
BaseMessageService service = kwaiAcceptServiceFactory.obtainMessageService(kwaiMessage.getEvent());
dispatchExecutorsPool.getDefaultThreadPool().execute(() -> service.execute(kwaiMessage));