整体项目介绍:
https://blog.csdn.net/wenjieyatou/article/details/80190886
优惠券项目一介绍:https://blog.csdn.net/wenjieyatou/article/details/80191083
优惠券项目二介绍:
https://blog.csdn.net/wenjieyatou/article/details/80203860
优惠券项目三介绍:
https://blog.csdn.net/wenjieyatou/article/details/80206069
下面是优惠券项目四介绍:
分支1.4
目的:通过异步和消息队列来进行发券具体方案:
1:通过异步进行发券,这样可以提高cpu的利用率,同时通过消息队列来保证稳定性,避免出现异常导致返回前端发券成功,但是异步制券时候出现异常
在发500张优惠券的时候效率大约提升了0.5s2:对代码进行一次重构
原则:把大方法修改小方法,每个小方法处理一个业务,比如获取获取,那么这个方法的职责就是获取活动,同时每个小方法尽量有返回值,这样可以增加代码的可读性
package com.peiyu.mem.manager.impl; import com.migr.common.util.JsonUtil; import com.peiyu.mem.dao.CouponDao; import com.peiyu.mem.domian.entity.Coupon; import com.peiyu.mem.manager.CouponManager; import com.peiyu.mem.rabbitmq.produces.MqSenderHandler; import com.peiyu.mem.utils.ListUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; import java.util.List; /** * Created by Administrator on 2016/12/7. */ @Service public class CouponManagerImpl implements CouponManager { private Logger log = Logger.getLogger(CouponManagerImpl.class); @Autowired private PlatformTransactionManager transactionManager; @Autowired private CouponDao couponDao; @Autowired private MqSenderHandler mqSenderHandler; @Override public boolean insertCoupons(final List<Coupon> coupons) { final long start1 = System.currentTimeMillis(); TransactionTemplate template = new TransactionTemplate(transactionManager); return template.execute(new TransactionCallback<Boolean>() { @Override public Boolean doInTransaction(TransactionStatus transactionStatus) { try { if (coupons.size() <= 5000) { couponDao.insertBatchCoupons(coupons); } if (coupons.size() > 5000) { List<List<Coupon>> tempCoupons = ListUtil.splitList(coupons, 5000); for (List<Coupon> item : tempCoupons) { try { couponDao.insertBatchCoupons(item); } catch (Exception e) { String data = JsonUtil.g.toJson(item);//将捕获到的异常交于消息队列处理 mqSenderHandler.sendMessage("spring.makeCoupons.queueKey", data); continue; } } } long end1 = System.currentTimeMillis(); log.info("添加" + coupons.size() + "张优惠券消耗时间:" + (end1 - start1) + "毫秒"); return true; } catch (Exception e) { log.error("添加优惠券异常:" + e); transactionStatus.setRollbackOnly(); return false; } } }); } @Override public boolean updateCoupons(final List<Coupon> coupons) { TransactionTemplate template = new TransactionTemplate(transactionManager); return template.execute(new TransactionCallback<Boolean>() { @Override public Boolean doInTransaction(TransactionStatus transactionStatus) { try { if (CollectionUtils.isNotEmpty(coupons)) { couponDao.updateBatchCouponsState(coupons); return true; } return false; } catch (Exception e) { transactionStatus.setRollbackOnly(); String data=JsonUtil.g.toJson(coupons);//将捕获到的异常交友消息队列处理 mqSenderHandler.sendMessage("spring.updateCouponState.queueKey",data); return false; } } }); } }