面向EDA(事件驅(qū)動架構(gòu))的方式來設(shè)計你的消息
AMQP routing key的設(shè)計
RabbitMQ cluster搭建
Mirror queue policy設(shè)置
兩個不錯的RabbitMQ plugin 大型應(yīng)用插件(Sharding、Rederation)
Queue鏡像失敗手動同步
各集群配置同步方式(RabbitMQ export\import)
客戶端連接方式(盡量采用AMQP組來動態(tài)鏈接)
RabbitMQ 產(chǎn)線二次產(chǎn)品化封裝(消息補償、發(fā)送消息持久化、異常處理、監(jiān)控頁面、重復(fù)消息剔除)
1.面向EDA(事件驅(qū)動架構(gòu))的方式來設(shè)計你的消息
在通常情況下你在使用消息中間件的時候,都是未經(jīng)設(shè)計的使用,你沒有把應(yīng)用架構(gòu)和系統(tǒng)架構(gòu)邊界搞清楚。消息中間件只是一個純粹的技術(shù)工具,當你引入的時候是站在應(yīng)用架構(gòu)的角度引入的。這是架構(gòu)的角度,也是架構(gòu)的上帝視角,這樣你就不會用到最后發(fā)現(xiàn)越來越混亂,而且也無法結(jié)合軟件模式、方法論、最佳實踐來綜合提升系統(tǒng)的架構(gòu)能力。
EDA(Event Driven Architecture,EDA) 事件驅(qū)動架構(gòu),它是一種用來在SOA或者Micro service中進行的架構(gòu)模式。它的好處有幾個,柔性具有很高的伸縮性。
(具體參考本人的SOA架構(gòu)文章:SOA架構(gòu)設(shè)計經(jīng)驗分享—架構(gòu)、職責(zé)、數(shù)據(jù)一致性)
既然要EDA就要規(guī)劃好你當前的系統(tǒng)邊界之內(nèi)有多少業(yè)務(wù)實體,這些實體是圍繞著領(lǐng)域模型而得來。所以這里不要很主觀的就定義一些你認為的事件,這些事件要根據(jù)業(yè)務(wù)實體中的對象來設(shè)計。業(yè)務(wù)實體起碼是有唯一Identity的。比如,訂單、商品,圍繞著這些實體展開,訂單可能有幾個狀態(tài)是比較常用的,創(chuàng)建、支付