優惠券項目四

整體項目介紹:

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章