RabbitMQ 延遲佇列實現訂單支付結果非同步階梯性通知
場景
在第三方支付中,例如支付寶、或者微信,對於訂單請求,第三方支付系統採用的是訊息同步返回、非同步通知+主動補償查詢的補償機制
1.商戶請求交易介面成功。
2.接受銀行的非同步通知。
3.處理業務,將通知URL和通知的資料放到佇列中。通知佇列是常駐的。
4.如果通知商戶成功/失敗更新通知狀態。如果通知失敗,根據通知間隔重新把通知資料放到通知佇列裡。
5*(2^n-1)秒後再次通知,n指回撥次數,最大為5次!
每次通知超時時間5秒。
支付計費中心對於訂單請求資訊的處理:
通過訊息同步返回、非同步通知、主動補償查詢相結合的機制
其中對於訂單的非同步通知,目前的通知策略為3s、30s、60s、120s、180、300s的階梯性通知。
返回成功情況下就不繼續通知了
使用rabbitmq的訊息延遲+死信佇列來實現
producer釋出訊息,通過exchangeA的訊息會被分發到QueueA,Consumer監聽queueA,一旦有訊息到來就被消費,這邊的消費業務就是通知前端,如果通知失敗,就建立一個延遲佇列declareQueue,設定每個訊息的ttl然後通過declare_exchange將訊息分發到declare_queue,因為declare_queue沒有consumer並且declare_queue中的訊息設定了ttl,當ttl到期後,將通過DLX路由到queueA,被重新消費。
相關文章
- RabbitMQ 實現延遲佇列MQ佇列
- RabbitMQ實現延遲佇列MQ佇列
- 使用RabbitMq原生實現延遲佇列MQ佇列
- RabbitMQ、RocketMQ、Kafka延遲佇列實現MQKafka佇列
- Golang 實現 RabbitMQ 的延遲佇列GolangMQ佇列
- 如何用RabbitMQ實現延遲佇列MQ佇列
- RabbitMQ實戰《延遲佇列》MQ佇列
- 實現簡單延遲佇列和分散式延遲佇列佇列分散式
- RabbitMQ 進階使用之延遲佇列 → 訂單在30分鐘之內未支付則自動取消MQ佇列
- Delayed Message 外掛實現 RabbitMQ 延遲佇列MQ佇列
- 如何才能讓Spring Boot與RabbitMQ結合實現延遲佇列Spring BootMQ佇列
- hyperf 實現延時佇列,處理超時未支付訂單佇列
- Node.js結合RabbitMQ延遲佇列實現定時任務Node.jsMQ佇列
- 基於訊息佇列(RabbitMQ)實現延遲任務佇列MQ
- Spring Boot(十四)RabbitMQ延遲佇列Spring BootMQ佇列
- RabbitMQ 學習筆記 -- 12 死信佇列 DLX + TTL 方式實現延遲佇列MQ筆記佇列
- 使用 RabbitMQ 實現延時佇列MQ佇列
- RabbitMQ釋出訂閱實戰-實現延時重試佇列MQ佇列
- 【RabbitMQ】一文帶你搞定RabbitMQ延遲佇列MQ佇列
- php+redis實現延遲佇列PHPRedis佇列
- 一張圖帶你理解和實現RabbitMQ的延遲佇列功能MQ佇列
- redis 延遲佇列Redis佇列
- Laravel 延遲佇列Laravel佇列
- 你知道Redis可以實現延遲佇列嗎?Redis佇列
- 高可用延遲佇列設計與實現佇列
- 延時佇列(RabbitMQ)佇列MQ
- php訂單延時處理-延時佇列PHP佇列
- 延遲阻塞佇列 DelayQueue佇列
- hyperf redis延遲佇列Redis佇列
- RabbitMQ:偽延時佇列MQ佇列
- rabbitMQ 延遲佇列外掛強制呼叫ReturnCallback裡returnedMessage方法MQ佇列
- RabbitMQ高階之訊息限流與延時佇列MQ佇列
- [Redis]延遲訊息佇列Redis佇列
- 基於rabbitmq延遲外掛實現分散式延遲任務MQ分散式
- RabbitMQ延時佇列的使用MQ佇列
- RabbitMQ使用 prefetch_count優化佇列的消費,使用死信佇列和延遲佇列實現訊息的定時重試,golang版本MQ優化佇列Golang
- 你真的知道怎麼實現一個延遲佇列嗎?佇列
- day114:MoFang:基於支付寶沙箱測試環境完成建立充值訂單介面&服務端處理支付結果的同步通知和非同步通知服務端非同步