【技術(shù)實(shí)現(xiàn)步驟摘要】
本專利技術(shù)涉及領(lǐng)域驅(qū)動設(shè)計,特別涉及一種領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法。
技術(shù)介紹
1、隨著系統(tǒng)業(yè)務(wù)復(fù)雜性越來越高,對數(shù)據(jù)的可擴(kuò)展性和傳輸性要求也越來越高。比如一個危貨運(yùn)輸代理商要入駐一個危貨運(yùn)輸企業(yè),就需要把代理商下的所有基礎(chǔ)數(shù)據(jù)同步給這個企業(yè)。包括賬號關(guān)系、設(shè)備類型與企業(yè)關(guān)系、作業(yè)活動與企業(yè)關(guān)系、安全檢查項(xiàng)目、部門組織架構(gòu)、崗位關(guān)系等等。這種應(yīng)用場景下,對與業(yè)務(wù)數(shù)據(jù)的可擴(kuò)展性、傳輸速率等性能要求比較高。
2、領(lǐng)域事件(domain?events)是領(lǐng)域驅(qū)動設(shè)計(domain?driven?design,簡稱ddd)中的一個概念,用于捕獲我們所建模的領(lǐng)域中所發(fā)生過的事情。比如:“如果發(fā)生……,則……”,“當(dāng)做完……的時候,請通知……”(這里的通知本身并不能構(gòu)成一個事件,而只是表明需要向外界發(fā)出通知)。在這些場景中,如果發(fā)生某種事件后,會觸發(fā)進(jìn)一步的操作,那這個事件可能就是領(lǐng)域事件。由于領(lǐng)域事件需要發(fā)布到外部系統(tǒng),比如發(fā)布到另一個限界上下文。由于這樣的事件由訂閱方處理,它將對本地和遠(yuǎn)程上下文產(chǎn)生深遠(yuǎn)的影響。
3、領(lǐng)域事件本身也作為通用語言(ubiquitous?language)的一部分,成為包括領(lǐng)域?qū)<以趦?nèi)的所有項(xiàng)目成員的交流用語。首先,從業(yè)務(wù)邏輯來說該事件關(guān)系到整個流程的成功或者失敗;同時又將觸發(fā)后續(xù)子流程。而對于業(yè)務(wù)方來說,該事件也是一個標(biāo)志性的里程碑,代表自己的數(shù)據(jù)同步到自己管轄下的子機(jī)構(gòu)的身上。所以通常來說,一個領(lǐng)域事件具有以下幾個特征:較高的業(yè)務(wù)價值,有助于形成完整的業(yè)務(wù)閉環(huán),將導(dǎo)致進(jìn)一步的業(yè)務(wù)
4、還需要強(qiáng)調(diào)的是,領(lǐng)域事件具有明確的邊界。本地限界上下文中的其他聚合實(shí)例便可以通過領(lǐng)域事件的方式同步,用于使遠(yuǎn)程依賴系統(tǒng)與本地系統(tǒng)保持一致。解耦本地系統(tǒng)和遠(yuǎn)程系統(tǒng)還有助于提高雙方協(xié)作服務(wù)的可伸縮性。
5、為了解決項(xiàng)目前期不可明確的復(fù)雜業(yè)務(wù)數(shù)據(jù)的傳輸以及之后的擴(kuò)展復(fù)用問題,本專利技術(shù)提出了一種領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法。
技術(shù)實(shí)現(xiàn)思路
1、本專利技術(shù)為了彌補(bǔ)現(xiàn)有技術(shù)的缺陷,提供了一種簡單高效的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法。
2、本專利技術(shù)是通過如下技術(shù)方案實(shí)現(xiàn)的:
3、一種領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:包括以下步驟:
4、步驟s1:創(chuàng)建領(lǐng)域事件
5、將系統(tǒng)中發(fā)生的每一件事情,都以事件形式捕獲,通過領(lǐng)域驅(qū)動設(shè)計模式對領(lǐng)域事件進(jìn)行建模;
6、步驟s2:事件發(fā)布
7、對聚合進(jìn)行命令操作時,聚合本身將領(lǐng)域事件發(fā)布給訂閱方處理;
8、步驟s3:事件訂閱
9、領(lǐng)域事件發(fā)布后,訂閱方先存儲事件,然后再將其轉(zhuǎn)發(fā)到遠(yuǎn)程訂閱方,或不經(jīng)存儲,直接轉(zhuǎn)發(fā)給遠(yuǎn)程訂閱方;
10、步驟s4:業(yè)務(wù)處理
11、通過事件監(jiān)聽器監(jiān)聽發(fā)布的領(lǐng)域事件,進(jìn)行業(yè)務(wù)數(shù)據(jù)的異步傳輸,訂閱者進(jìn)行數(shù)據(jù)業(yè)務(wù)處理,進(jìn)行數(shù)據(jù)清洗或者根據(jù)具體業(yè)務(wù)進(jìn)行數(shù)據(jù)存儲/數(shù)據(jù)分析。
12、所述步驟s1中,在創(chuàng)建領(lǐng)域事件時,領(lǐng)域事件本身是不變的(immutable);同時領(lǐng)域事件攜帶與事件發(fā)生時相關(guān)的上下文數(shù)據(jù)信息,但是并不攜帶整個聚合根的狀態(tài)數(shù)據(jù)。
13、所述步驟s1中,根據(jù)業(yè)務(wù)和邏輯確定好關(guān)聯(lián)的實(shí)體和值對象,創(chuàng)建一個領(lǐng)域事件,并繼承applicationevent(應(yīng)用程序事件)事件。
14、為了維護(hù)領(lǐng)域模型的獨(dú)立性和數(shù)據(jù)一致性,所述步驟s2中,事件發(fā)布完成后,發(fā)布方不必關(guān)心后續(xù)訂閱方事件處理是否成功,直接實(shí)現(xiàn)領(lǐng)域模型的解耦。
15、所述步驟s2中,在領(lǐng)域模型映射到微服務(wù)架構(gòu)時,領(lǐng)域事件解耦微服務(wù),微服務(wù)間的數(shù)據(jù)不必要求強(qiáng)一致性,而是基于事件的最終一致性。
16、所述步驟s2中,通過事件發(fā)布器eventpublisher注入applicationcontex(應(yīng)用程序上下文)的publishevent(發(fā)布事件)方法發(fā)布領(lǐng)域事件。
17、所述步驟s4中,配置異步任務(wù),并啟動線程池執(zhí)行異步任務(wù);添加@async注解,調(diào)用異步線程,訂閱者采用addedeventlistener()方法實(shí)現(xiàn)applicationlistener接口,用于監(jiān)聽領(lǐng)域事件,并重寫onapplicationevent方法。
18、一種領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)設(shè)備,其特征在于:包括存儲器和處理器;所述存儲器用于存儲計算機(jī)程序,所述處理器用于執(zhí)行所述計算機(jī)程序時實(shí)現(xiàn)如上所述的方法步驟。
19、一種可讀存儲介質(zhì),其特征在于:所述可讀存儲介質(zhì)上存儲有計算機(jī)程序,所述計算機(jī)程序被處理器執(zhí)行時實(shí)現(xiàn)如上所述的方法步驟。
20、本專利技術(shù)的有益效果是:該領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,數(shù)據(jù)源擴(kuò)展性強(qiáng),靈活可靠,且不受網(wǎng)絡(luò)因素制約,能夠在復(fù)雜的業(yè)務(wù)模式下靈活的傳輸數(shù)據(jù),大大提高了程序的方便性。
本文檔來自技高網(wǎng)...【技術(shù)保護(hù)點(diǎn)】
1.一種領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:包括以下步驟:
2.根據(jù)權(quán)利要求1所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:所述步驟S1中,在創(chuàng)建領(lǐng)域事件時,領(lǐng)域事件本身是不變的;同時領(lǐng)域事件攜帶與事件發(fā)生時相關(guān)的上下文數(shù)據(jù)信息,但是并不攜帶整個聚合根的狀態(tài)數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:所述步驟S1中,根據(jù)業(yè)務(wù)和邏輯確定好關(guān)聯(lián)的實(shí)體和值對象,創(chuàng)建一個領(lǐng)域事件,并繼承ApplicationEvent事件。
4.根據(jù)權(quán)利要求1所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:為了維護(hù)領(lǐng)域模型的獨(dú)立性和數(shù)據(jù)一致性,所述步驟S2中,事件發(fā)布完成后,發(fā)布方不必關(guān)心后續(xù)訂閱方事件處理是否成功,直接實(shí)現(xiàn)領(lǐng)域模型的解耦。
5.根據(jù)權(quán)利要求1所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:所述步驟S2中,在領(lǐng)域模型映射到微服務(wù)架構(gòu)時,領(lǐng)域事件解耦微服務(wù),微服務(wù)間的數(shù)據(jù)不必要求強(qiáng)一致性,而是基于事件的最終一致性。
6.根據(jù)權(quán)利要求3所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:所述步驟S2
7.根據(jù)權(quán)利要求6所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:所述步驟S4中,配置異步任務(wù),并啟動線程池執(zhí)行異步任務(wù);添加@Async注解,調(diào)用異步線程,訂閱者采用AddedEventListener()方法實(shí)現(xiàn)ApplicationListener接口,用于監(jiān)聽領(lǐng)域事件,并重寫onApplicationEvent方法。
8.一種領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)設(shè)備,其特征在于:包括存儲器和處理器;所述存儲器用于存儲計算機(jī)程序,所述處理器用于執(zhí)行所述計算機(jī)程序時實(shí)現(xiàn)如權(quán)利要求1至7任意一項(xiàng)所述的方法步驟。
9.一種可讀存儲介質(zhì),其特征在于:所述可讀存儲介質(zhì)上存儲有計算機(jī)程序,所述計算機(jī)程序被處理器執(zhí)行時實(shí)現(xiàn)如權(quán)利要求1至7任意一項(xiàng)所述的方法步驟。
...【技術(shù)特征摘要】
1.一種領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:包括以下步驟:
2.根據(jù)權(quán)利要求1所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:所述步驟s1中,在創(chuàng)建領(lǐng)域事件時,領(lǐng)域事件本身是不變的;同時領(lǐng)域事件攜帶與事件發(fā)生時相關(guān)的上下文數(shù)據(jù)信息,但是并不攜帶整個聚合根的狀態(tài)數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:所述步驟s1中,根據(jù)業(yè)務(wù)和邏輯確定好關(guān)聯(lián)的實(shí)體和值對象,創(chuàng)建一個領(lǐng)域事件,并繼承applicationevent事件。
4.根據(jù)權(quán)利要求1所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:為了維護(hù)領(lǐng)域模型的獨(dú)立性和數(shù)據(jù)一致性,所述步驟s2中,事件發(fā)布完成后,發(fā)布方不必關(guān)心后續(xù)訂閱方事件處理是否成功,直接實(shí)現(xiàn)領(lǐng)域模型的解耦。
5.根據(jù)權(quán)利要求1所述的領(lǐng)域事件驅(qū)動異步傳輸數(shù)據(jù)方法,其特征在于:所述步驟s2中,在領(lǐng)域模型映射到微服務(wù)架構(gòu)時,領(lǐng)域事件解耦微服務(wù),微服務(wù)間的數(shù)據(jù)不必要求強(qiáng)一致性,而是基于事件的最終一致性。
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:李承林,徐士強(qiáng),王禹博,
申請(專利權(quán))人:浪潮云信息技術(shù)股份公司,
類型:發(fā)明
國別省市:
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。