本文主要講解RabbitMQ的介紹和安裝,Spring Cloud Stream核心概念,Spring Cloud Alibaba RocketMQ學習,異步消息推送與消費java
com/javaedge/contentcenter/service/content/ShareService.java
假設添加積分操做很耗時,咱們的主要操做是審覈,而不關心積分,因此能夠將其異步化react
◆ AsyncRestTemplategit
◆ @ Async註解github
◆ WebClient ( Spring 5.0引入 ,爲取代AsyncRestTemplate)web
◆ MQ咱們採用此法spring
流行的MQ那麼多,如何選擇?apache
content-center編程
開始拿出三板斧:網絡
user-center
com.javaedge.contentcenter.rocketmq.AddBonusTransactionListener
流程剖析、概念術語、如何實現事務呢,咱們知道Spring有事務註解,那麼直接就添加@Transaction註解吧!可這樣是萬無一失了嗎?顯然不行,由於消息已經發出,無法撤回了那麼看看RocketMQ是怎麼解決分佈式事務問題呢
業務流程圖
整體來講,就是生產者把消息發送到MQ,但MQ只是將其標記,不讓消費者消費而後生產者就執行本地事務,執行完後就知道究竟是該投遞仍是丟棄該消息了!這其實就是典型的二次確認消費回查就是防止二次確認消息發送異常的容錯處理
◆ 半消息( Half(Prepare) Message )暫時沒法消費的消息。生產者將消息發送到了MQ server ,但這個消息會被標記爲"暫不能投遞"狀態,先存儲起來;消費者不會去消費這條消息。並非消息的狀態,只是一種特殊的消息而已◆ 消息回查(Message Status Check )網絡斷開或生產者重啓可能致使丟失事務消息的第二次確認。當MQ Server發現消息長時間處於半消息狀態時,將向消息生產者發送請求,詢問該消息的最終狀態(提交或回滾)。
◆ Commit提交事務消息,消費者能夠消費此消息◆ Rollback回滾事務消息, broker會刪除該消息,消費者不能消費.◆UNKNOWNbroker須要回查確認該消息的狀態
rocketmq_transaction_log
rocketmq
包,並在其中建立一個新類AddBonusTransactionListener
@RocketMQTransactionListener
註解注意這裏的