优惠券项目四

整体项目介绍:

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;
                }
            }
        });
    }
}




猜你喜欢

转载自blog.csdn.net/wenjieyatou/article/details/80207217