最近總是發現支付發紅包優惠券發完的情況,但是發現的比較遲緩,於是乎,想加乙個哨兵監控,統計了一下,組內不少需求都有傳送優惠券的行為,也是經常遇到傳送異常的情況,所以,想針對優惠券傳送封裝乙個公共的方法進行呼叫,下面是封裝的公共方法:
public couponresponsesendcoupon(listreedcodelist,string accountid,antiinfovo antiinfovo)方法很簡單,就是封裝一下,加個監控,但是發現**中呼叫發券dubbo介面的地方很多,要改不少地方,於是想起來面向切面程式設計aop,這裡先簡單介紹一下aop(引用自return couponresponsevo;
}
aop(aspect oriented programming),即面向切面程式設計,可以說是oop(object oriented programming,物件導向程式設計)的補充和完善。oop引入封裝、繼承、多型等概念來建立一種物件層次結構,用於模擬公共行為的乙個集合。不過oop允許開發者定義縱向的關係,但並不適合定義橫向的關係,例如日誌功能。日誌**往往橫向地散布在所有物件層次中,而與它對應的物件的核心功能毫無關係。對於其他型別的**,如安全性、異常處理和介面呼叫監控也都是如此,這種散布在各處的無關的**被稱為橫切(cross cutting),在oop設計中,它導致了大量**的重複,而不利於各個模組的重用。
aop技術恰恰相反,它利用一種稱為"橫切"的技術,剖解開封裝的物件內部,並將那些影響了多個類的公共行為封裝到乙個可重用模組,並將其命名為"aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複**,降低模組之間的耦合度,並有利於未來的可操作性和可維護性。
使用"橫切"技術,aop把軟體系統分為兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關係不大的部分是橫切關注點。橫切關注點的乙個特點是,他們經常發生在核心關注點的多處,而各處基本相似,比如許可權認證、日誌、事物。aop的作用在於分離系統中的各種關注點,將核心關注點和橫切關注點分離開來。
於是乎,說幹就幹,很快**出爐
@aspect多麼乾淨利落,這樣子就不用通過動原來邏輯來新增哨兵監控了。首先定義pointcut切入點,切入點就是指定乙個adivce將被引發的一系列連線點的集合,這裡根據正則匹配定義了兩個切入點,第乙個切入點匹配的是 com.netease.kaola.compose.coupon.provider.couponcomposefacade裡返回型別是 com.netease.kaola.compose.coupon.vo.couponresponse>的方法,從目前系統dubbo呼叫看,匹配的是單個發券的方法,第二個切入點匹配的是 com.netease.kaola.compose.coupon.provider.couponcomposefacade裡返回型別是com.netease.kaola.compose.coupon.vo.couponresponse的方法,從目前系統dubbo呼叫看,匹配的是批量發券的方法。public class couponwarnaspect
/*** 批量傳送
*/@pointcut(value = "execution(com.netease.kaola.compose.coupon.vo.couponresponse" +
" com.netease.kaola.compose.coupon.provider.couponcomposefacade.*(..))")
public void couponbatchwarnpoint(){}
@around(value = "couponwarnpoint()")
public couponresponse> couponwarn(proceedingjoinpoint pjp) throws throwable
return couponresponse;
} catch (throwable throwable)
}@around(value = "couponbatchwarnpoint()")
public couponresponsecouponbatchwarn(proceedingjoinpoint pjp) throws throwable
return couponresponse;
} catch (throwable throwable) }}
切入點定義好之後,開始在advice中進行引用,當然,也可以直接在advice中通過正則匹配指定切入點。advice( 通知),包括前置(before)、後置(afterreturning)、異常(afterthrowing)、環繞(around)等這幾類常用的。我們這裡用到了環繞,環繞就是對呼叫的目標方法進行包裹,可以在呼叫前後做一些我們需要的操作,比如上述,就是在呼叫目標方法後通過判斷返回碼和異常來新增哨兵監控。
最後通過spring配置和aspect註解建立**類:
測試一下,優惠券傳送失敗的情況完美的呈現在哨兵上了:通過這次,大概總結了一下,程式設計不能按部就班,多思考一下,就會發現有很多捷徑可走,從而高效率的把系統設計的更具健壯性和可維護性,技術上也得到突破和提公升,何樂而不為。
網易雲免費體驗館,0成本體驗20+款雲產品!
優惠券實現 從0到1,優惠券體系的搭建
優惠券體系可以說是任何產品都可能會用到的,近期進行了優惠券體系的設計,為了有更深的理解,筆者總結了自己從0到1的優惠券體系搭建,與大家分享。有自動發券跟人工發券。自動發券一般是在固定的場景下系統自動發放的。人工發券是給某個或者一批使用者進行批量發券。1 技術實現上需要考慮要有場景的編號。方便後續場景...
優惠券實現 易維雲如何玩轉優惠券的分享裂變
如今,想玩轉分享裂變是離不開優惠福利的,送優惠券就是一種方式,那麼優惠券都有哪些特點?據建站abc了解,優惠券的本質就是商家通過折扣 滿減 抵扣等形式給使用者提供的一種優惠福利,然後通過利用使用者 佔到便宜 的心理進行營銷裂變,優惠券常見的特點有如下幾點 一 吸引新人下單 二 建立品牌口碑 對於商家...
css 效果 邊沿打孔的優惠券
專案中用到了這個邊沿打孔的效果,嘗試下來使用純css寫的這個樣式,在這裡分享一下 效果大致如圖 分步實現思路 1,先畫兩個帶圓角的框,a和b a b分別需要加投影效果,圖上沒有做 2,在b的左右兩條縫隙的地方分別畫一排圓 其實是正方形用了50 的圓角 圓填充色和背景色相同 此處背景色是白色,所以圓的...