業(yè)務(wù)邏輯如下:1、創(chuàng)建訂單2、發(fā)送郵件,提醒相關(guān)人員訂單創(chuàng)建完成。剛開始,創(chuàng)建訂單之后,發(fā)送郵件是做成同步的,這樣導(dǎo)致一個(gè)問題,創(chuàng)建訂單這個(gè)操作耗時(shí)太長(zhǎng),帶來的直觀效果就是:頁面的那個(gè)圈圈一直在轉(zhuǎn),雖然訂單創(chuàng)建成功,但是郵件發(fā)送失敗,由于他們?cè)谝粋€(gè)事務(wù)中,spring aop配置了如果有失敗,就要回滾操作。基于以上事實(shí),所以決定將郵件發(fā)送的服務(wù)設(shè)置為異步的方式。我的設(shè)計(jì)思路是這樣的。1.創(chuàng)建訂單。2.利用消息中間件notify,將發(fā)送郵件的body放到notify的發(fā)布者當(dāng)中,這個(gè)流程就結(jié)束了。然后有一個(gè)消息的訂閱者,消息的訂閱者訂閱發(fā)送方的消息,當(dāng)訂閱到消息之后,將消息通過郵件的方式發(fā)送。這樣就做成了郵件的異步發(fā)送。這種異步的設(shè)計(jì),要把消息傳到中間件服務(wù)器,再從中間件服務(wù)器上拿消息,有沒有更好的設(shè)計(jì)方案???
3 回答

Smart貓小萌
TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
因?yàn)閔ttp是一種應(yīng)答性質(zhì)的協(xié)議,要想實(shí)現(xiàn)異步發(fā)送郵件,就必須由服務(wù)器本身去實(shí)現(xiàn),而不是http本身。
從設(shè)計(jì)方面,對(duì)于服務(wù)器資源寬裕的來說,可以用一臺(tái)服務(wù)器專門做郵件服務(wù)器,對(duì)外公開接口來實(shí)現(xiàn)異步發(fā)送郵件。
否則,則需要把要發(fā)送的郵件和內(nèi)容存儲(chǔ)起來(如數(shù)據(jù)庫,文本文件,redis等),然后通過以下方式來異步發(fā)送。
對(duì)于windows系列服務(wù)器,可以編寫服務(wù),利用系統(tǒng)task等簡(jiǎn)單來實(shí)現(xiàn)。
對(duì)于linux系列服務(wù)器,可以通過corn
定時(shí),守護(hù)進(jìn)程等來實(shí)現(xiàn)。

慕碼人8056858
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
添加回答
舉報(bào)
0/150
提交
取消