<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構建微服務

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

    項目源碼:GitHub

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

    微服務是單個職責的功能,自己的數據存儲,每個能彼此獨立擴展部署。

    屬于命令這邊的微服務和屬性查詢這邊的微服務都是使用Spring Boot框架開發的,在命令微服務和查詢微服務之間通訊是事件驅動,事件是通過RabbitMQ消息在微服務組件之間傳遞,消息提供了一種進程節點或微服務之間可擴展的事件載體,包括與傳統遺留系統或其他系統的松耦合通訊都可以通過消息進行。

    請注意,服務之間不能彼此共享數據庫,這是很重要,因為微服務應該是高度自治自主的,這樣反過來有助于服務能夠彼此獨立地擴展伸縮規模。

    CQRS中命令是“改變狀態的動作”。命令的微服務包含所有領域邏輯和業務規則,命令被用于增加新的產品或改變它們的狀態,這些命令針對某個具體產品的執行會導致事件Event產生,這會通過Axon框架持久化到MongoDB中,然后通過RabbitMQ傳播給其他節點進程或微服務。

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

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

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

    在這個案例中,查詢這邊只是簡單建立和維持了一個 ‘materialised view’或‘projection’ ,其中保留了產品的最新狀態,也就是產品id和描述以及是否被賣出等等信息,查詢這邊能夠被復制多次以方便擴展,消息可以保留在RabbitMQ隊列中實現持久保存,這種臨時保存消息方式可以防止查詢這邊微服務當機。

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

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

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

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

    啟動微服務:只是簡單一個命令:

    $ docker-compose up

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

    使用下面命令進行測試增加一個新產品:

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

    查詢這個新產品:

    $ 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

    主站蜘蛛池模板: 中文文字幕文字幕亚洲色| 一本久久A久久免费精品不卡| 永久免费的网站在线观看| 亚洲av最新在线观看网址| 亚洲精品网站在线观看不卡无广告 | 国产在线19禁免费观看| 中文字幕手机在线免费看电影 | 国产成人精品免费视频软件| 国产精品无码免费专区午夜| 亚洲制服丝袜在线播放| 亚洲JIZZJIZZ中国少妇中文| 久久久免费精品re6| 国产一区二区三区亚洲综合| 亚洲成a人片77777老司机| 永久免费看mv网站入口| 久久免费观看国产99精品| 色噜噜噜噜亚洲第一| 中文字幕亚洲免费无线观看日本| 免费人成年激情视频在线观看 | 内射无码专区久久亚洲| 永久黄色免费网站| 国产免费牲交视频免费播放| 亚洲午夜理论片在线观看| 久久91亚洲精品中文字幕| 亚洲av再在线观看| 成年人免费观看视频网站| 久久国产精品免费专区| jizz免费一区二区三区| 亚洲av无码专区首页| 亚洲国产片在线观看| 亚洲AV无码专区电影在线观看| 又粗又大又硬又爽的免费视频| 成人AV免费网址在线观看| 久久久久久影院久久久久免费精品国产小说 | 在线a级毛片免费视频| 无码国产精品一区二区免费模式 | 成人无码a级毛片免费| 视频一区在线免费观看| 中文字幕乱码亚洲无线三区| 亚洲精品成人久久| 久久久久久久久亚洲|