RabbitMQ系列 七 批量訊息和延時訊息

2022-02-18 21:13:40 字數 1252 閱讀 5078

批量訊息是指把訊息放到乙個集合統一進行提交,這種方案設計思路是希望訊息在乙個會話裡,比如放到threadlocal裡的集合,擁有相同

的會話id,帶有這次提交資訊的size等屬性,最重要的是吧這一批訊息進行合併。對於channel就是傳送一次訊息。這種方式也是希望消費端在消

費的時候,可以進行批量化的消費,針對乙個原子業務的操作進行處理,但是不保證可靠性,需要進行補償機制。

圖例:

偽**思路:

@data

@allargsconstructor

@noargsconstructor

public

class

batchmessage

把message放到threadlocal裡面使用,這些批量的訊息需要同乙個sessionid,如果要入庫,只是儲存sessionid對應的訊息集合,而不是每條訊息

步驟: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 ...