批量訊息是指把訊息放到乙個集合統一進行提交,這種方案設計思路是希望訊息在乙個會話裡,比如放到threadlocal裡的集合,擁有相同
的會話id,帶有這次提交資訊的size等屬性,最重要的是吧這一批訊息進行合併。對於channel就是傳送一次訊息。這種方式也是希望消費端在消
費的時候,可以進行批量化的消費,針對乙個原子業務的操作進行處理,但是不保證可靠性,需要進行補償機制。
圖例:
偽**思路:
@data把message放到threadlocal裡面使用,這些批量的訊息需要同乙個sessionid,如果要入庫,只是儲存sessionid對應的訊息集合,而不是每條訊息@allargsconstructor
@noargsconstructor
public
class
batchmessage
步驟:1、首先業務資料入庫
2、將批量訊息對應的batchmessage入庫,狀態為傳送中
3、傳送message到broker
4、返回confirm確認
5、修改狀態為消費成功
6、。。。。後面不講了,和之前部落格思路一樣
使用場景:
1、在電商平台買到的商品簽收後,不點選確認支付,系統自動在一定時間進行支付操作
2、自動超時作廢的場景,你的優惠券/紅包也有使用時限,也可以用延遲訊息機制
實現:1、dlx和ttl:consumer訂閱dlx,message傳送到原queue,設定ttl為30分鐘。ttl到期,訊息傳送到dlx,然後被consumer消費,就可以實現延遲佇列
2、rabbitmq 3.5.7及以上的版本提供了乙個外掛程式(rabbitmq-delayed-message-exchange)來實現延遲佇列功能
安裝、啟用外掛程式
mapheaders = new hashmap();headers.put("x-delay", 30*60*1000);
amqp.basicproperties.builder props = new
amqp.basicproperties.builder().headers(headers);
channel.basicpublish("my-exchange", "", props.build(), messagebodybytes);
使用者系列之七 批量建使用者之終結版
本來使用者系列已經結束,但總有學員在問關於批量建使用者的問題,雖然現在好多文章都在討論這個,但從實用價值上看,有的意義好像不大,因此今天就來分析一下有關批量建使用者的問題,我會從理論和生產角度來和各位分析,你應該採用哪種方法。我們今天討論的是域環境,至於工作組環境,生產意義不大,在此不做深入研究。建...
Elasticsearch(三) 批量操作
語法 什麼是partial update?put index type id,建立文件 替換文件,就是一樣的語法 一般對應到應用程式中,每次的執行流程基本是這樣的 1 應用程式先發起乙個get請求,獲取到document,展示到前台介面,供使用者檢視和修改 2 使用者在前台介面修改資料,傳送到後台 ...
struts2 批量新增
1.在action中定義,list屬性 product為pojo 2.jsp頁面中 s iterator value new int 3 status stat tr td s textfield name td td s textfield name td td s textfield name ...