<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    基于Spring Boot, Axon CQRS/ES,和Docker構(gòu)建微服務(wù)

    這是一個使用Spring Boot和Axon以及Docker構(gòu)建的Event Sorucing源碼項目,技術(shù)特點(diǎn):
    1.使用Java 和Spring Boot實(shí)現(xiàn)微服務(wù);
    2.使用命令和查詢職責(zé)分離 (CQRS) 和 Event Sourcing (ES) 的框架Axon Framework v2, MongoDB 和 RabbitMQ;
    3.使用Docker構(gòu)建 交付和運(yùn)行;
    4.集中配置和使用Spring Cloud服務(wù)注冊;
    5.使用Swagger 和 SpringFox 提供API文檔

    項目源碼:GitHub

    工作原理:
    這個應(yīng)用使用CQRS架構(gòu)模式構(gòu)建,在CQRS命令如ADD是和查詢VIEW(where id=1)分離的,在這個案例中領(lǐng)域部分代碼已經(jīng)分離成兩個組件:一個是屬于命令這邊的微服務(wù)和屬性查詢這邊的微服務(wù)。

    微服務(wù)是單個職責(zé)的功能,自己的數(shù)據(jù)存儲,每個能彼此獨(dú)立擴(kuò)展部署。

    屬于命令這邊的微服務(wù)和屬性查詢這邊的微服務(wù)都是使用Spring Boot框架開發(fā)的,在命令微服務(wù)和查詢微服務(wù)之間通訊是事件驅(qū)動,事件是通過RabbitMQ消息在微服務(wù)組件之間傳遞,消息提供了一種進(jìn)程節(jié)點(diǎn)或微服務(wù)之間可擴(kuò)展的事件載體,包括與傳統(tǒng)遺留系統(tǒng)或其他系統(tǒng)的松耦合通訊都可以通過消息進(jìn)行。

    請注意,服務(wù)之間不能彼此共享數(shù)據(jù)庫,這是很重要,因?yàn)槲⒎?wù)應(yīng)該是高度自治自主的,這樣反過來有助于服務(wù)能夠彼此獨(dú)立地擴(kuò)展伸縮規(guī)模。

    CQRS中命令是“改變狀態(tài)的動作”。命令的微服務(wù)包含所有領(lǐng)域邏輯和業(yè)務(wù)規(guī)則,命令被用于增加新的產(chǎn)品或改變它們的狀態(tài),這些命令針對某個具體產(chǎn)品的執(zhí)行會導(dǎo)致事件Event產(chǎn)生,這會通過Axon框架持久化到MongoDB中,然后通過RabbitMQ傳播給其他節(jié)點(diǎn)進(jìn)程或微服務(wù)。

    在event-sourcing中,事件是狀態(tài)改變的原始記錄,它們用于系統(tǒng)來重新建立實(shí)體的當(dāng)前狀態(tài)(通過重新播放過去的事件到當(dāng)前就可以構(gòu)建當(dāng)前的狀態(tài)),這聽上去會很慢,但是實(shí)際上,事件都很簡單,執(zhí)行非常快,也能采取‘快照’策略進(jìn)行優(yōu)化。

    請注意,在DDD中,實(shí)體是指一個聚合根實(shí)體。

    上面是命令這邊的微服務(wù),下面看看查詢這邊的微服務(wù):
    查詢微服務(wù)一般扮演一種事件監(jiān)聽器和視圖角色,它監(jiān)聽到命令那邊發(fā)出的事件,然后處理它們以符合查詢這邊的要求。

    在這個案例中,查詢這邊只是簡單建立和維持了一個 ‘materialised view’或‘projection’ ,其中保留了產(chǎn)品的最新狀態(tài),也就是產(chǎn)品id和描述以及是否被賣出等等信息,查詢這邊能夠被復(fù)制多次以方便擴(kuò)展,消息可以保留在RabbitMQ隊列中實(shí)現(xiàn)持久保存,這種臨時保存消息方式可以防止查詢這邊微服務(wù)當(dāng)機(jī)。

    命令微服務(wù)和查詢微服務(wù)兩者都有REST API,提供外界客戶端訪問。

    下面看看如何通過Docker運(yùn)行這個案例,需要 Ubuntu 16.04:
    1.Docker ( v1.8.2)
    2.Docker-compose ( v1.7.1)

    在一個空目錄,執(zhí)行下面命令下載docker-compose:

    $ wget https://raw.githubusercontent.com/benwilcock/microservice-sampler/master/docker-compose.yml
    注意:不要更改文件名稱。

    啟動微服務(wù):只是簡單一個命令:

    $ docker-compose up

    你會看到許多下載信息和日志輸出在屏幕上,這是Docker image將被下載和運(yùn)行。一共有六個docker,分別是: ‘mongodb’, ‘rabbitmq’, ‘config’, ‘discovery’, ‘product-cmd-side’, 和 ‘product-qry-side’.

    使用下面命令進(jìn)行測試增加一個新產(chǎn)品:

    $ curl -X POST -v --header "Content-Type: application/json" --header "Accept: */*" "http://localhost:9000/products/add/1?name=Everything%20Is%20Awesome"

    查詢這個新產(chǎn)品:

    $ curl http://localhost:9001/products/1

    Microservices With Spring Boot, Axon CQRS/ES, and Docker

    posted on 2017-02-18 22:00 paulwong 閱讀(1864) 評論(0)  編輯  收藏 所屬分類: DDD

    主站蜘蛛池模板: 毛片高清视频在线看免费观看| 又黄又大的激情视频在线观看免费视频社区在线| 亚洲av不卡一区二区三区| 国产在线精品免费aaa片| caoporn成人免费公开| 无码AV动漫精品一区二区免费| 免费国产va在线观看| 一级做a毛片免费视频| 久久久精品国产亚洲成人满18免费网站| a高清免费毛片久久| 久久久久久噜噜精品免费直播| 成人无码区免费A∨直播| 免费精品99久久国产综合精品| 久久爰www免费人成| 久久精品国产免费观看| 久久精品免费大片国产大片| 精品多毛少妇人妻AV免费久久| 国产免费久久精品丫丫| 久久大香香蕉国产免费网站| 亚洲网站在线免费观看| 成年女人色毛片免费看| 1000部夫妻午夜免费| 歪歪漫画在线观看官网免费阅读| 在线观看免费毛片| 亚洲国产成人久久综合野外| 亚洲深深色噜噜狠狠爱网站 | 国内永久免费crm系统z在线| 美女被吸屁股免费网站| aa级女人大片喷水视频免费| 日本免费一区二区三区 | 又硬又粗又长又爽免费看 | 精品亚洲一区二区| 亚洲美女中文字幕| 亚洲aⅴ无码专区在线观看春色 | 亚洲日本成本人观看| 全黄A免费一级毛片| 国产白丝无码免费视频| 成年男女男精品免费视频网站| 成人亚洲网站www在线观看 | 全部免费国产潢色一级 | 免费黄网在线观看|