springboot rabbitmq 延時隊列消息確認收貨訂單已完成

供應商后臺-點擊發貨-默認3天自動收貨確認,更新訂單狀態已完成。

1 pom.xml 引入依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

2 運營后臺-訂單-發貨按鈕:生產者發布延時消息

// 5. 發送自動確認收貨消息// 計算延遲時間String autoDeliveryDays = configService.getConfigVal(SettingsEnum.AUTO_DELIVERY_DAYS);if (StrUtil.isNotBlank(autoDeliveryDays)) {// long delayTime = Long.parseLong(autoDeliveryDays) * 24 * 60 * 60 * 1000;BigDecimal delayTime = new BigDecimal(autoDeliveryDays).multiply(new BigDecimal(24 * 60 * 60 * 1000));rabbitTemplate.convertAndSend(RabbitMQConfig.DELAY_EXCHANGE,RabbitMQConfig.ORDER_CONFIRM_RECEIPT_ROUTING_KEY,order.getOrderId(),message -> {message.getMessageProperties().setHeader("x-delay", delayTime.longValue());return message;});}

3 RabbitMQ消息隊列,路由鍵,交換機配置

package com.tigshop.common.config;import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;@Configuration
public class RabbitMQConfig { // 路由鍵public static final String ORDER_CONFIRM_RECEIPT_ROUTING_KEY = "order.confirm.receipt.routing.key";// 隊列名稱public static final String ORDER_CONFIRM_RECEIPT_QUEUE = "orderConfirmReceiptQueue";/*** 直連交換機(普通交換機)*/@Beanpublic DirectExchange directExchange() {return new DirectExchange(DIRECT_EXCHANGE);}/*** 延遲交換機*/@Beanpublic CustomExchange delayExchange() {Map<String, Object> args = new HashMap<>();args.put("x-delayed-type", "direct");return new CustomExchange(DELAY_EXCHANGE, "x-delayed-message", true, false, args);}@Beanpublic Queue orderConfirmReceiptQueue() {return QueueBuilder.durable(ORDER_CONFIRM_RECEIPT_QUEUE).build();}@Beanpublic Binding orderConfirmReceiptBinding() {return BindingBuilder.bind(orderConfirmReceiptQueue()).to(delayExchange()).with(ORDER_CONFIRM_RECEIPT_ROUTING_KEY).noargs();}}

4 消費者實現監聽器消費

@RequiredArgsConstructor
@Service
@Slf4j
public class RabbitMqConsumer{@RabbitListener(queues = RabbitMQConfig.ORDER_CONFIRM_RECEIPT_QUEUE)public void receiveOrderConfirmReceiptMessage(Integer orderId) {log.info("收到訂單自動確認收貨消息:{}", orderId);// 判斷是否已經收貨Long receivedCount = orderService.lambdaQuery().eq(Order::getOrderId, orderId).eq(Order::getShippingStatus, ShippingStatusEnum.SHIPPED.getCode()).count();if (receivedCount == 1) {return;}// 判斷訂單是否售后中Long aftersalesCount = aftersalesService.lambdaQuery().eq(Aftersales::getOrderId, orderId).eq(Aftersales::getStatus, AftersalesStatusEnum.IN_REVIEW.getCode()).count();if (aftersalesCount == 1) {return;}try {orderService.confirmReceipt(orderId);} catch (GlobalException e) {log.error("【異常】收到訂單自動確認收貨消息 RabbitMQ:{}", e.getMessage());}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96084.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96084.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96084.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux內核TCP輸出引擎:深入解析數據傳輸的核心機制

引言 傳輸控制協議(TCP)作為互聯網最重要的基礎協議之一,其實現質量直接關系到網絡性能和應用體驗。在Linux內核中,TCP協議的輸出引擎是實現可靠數據傳輸的核心組件,負責將應用層數據高效、可靠地傳輸到網絡對端。本文將深入分析Linux內核中TCP輸出引擎的關鍵機制和實現原…

數據倉庫詳解

數據倉庫詳解第一節 數據倉庫構建方法論和實踐一、數據倉庫與數據庫的區別二、數據倉庫對于企業的價值三、數據倉庫的模型構建1、數據倉庫構建需要考慮的問題2、什么是數倉的數據模型3、如何構建數倉的數據模型&#xff08;1&#xff09;概念模型設計&#xff08;2&#xff09;…

單身杯1(web)

web簽到<?php# -*- coding: utf-8 -*- # Author: h1xa # Date: 2022-03-19 12:10:55 # Last Modified by: h1xa # Last Modified time: 2022-03-19 13:27:18 # email: h1xactfer.com # link: https://ctfer.comerror_reporting(0); highlight_file(__FILE__);$file $_…

RNN/LSTM/GRU/Transformer

RNN的局限1&#xff1a;長期依賴&#xff08;Long-TermDependencies&#xff09;問題但是同樣會有一些更加復雜的場景。比如我們試著去預測“I grew up in France...I speak fluent French”最后的詞“French”。當前的信息建議下一個詞可能是一種語言的名字&#xff0c;但是如…

瀏覽器開發CEFSharp+X86 (十六)網頁讀取電子秤數據——仙盟創夢IDE

一、東方仙盟智能瀏覽器&#xff1a;跨平臺&#xff0c;暢連百種硬件&#xff0c;速啟現場編譯東方仙盟 VOS 智能瀏覽器在網頁調用硬件 SDK 領域堪稱卓越典范。它全面兼容多平臺&#xff0c;無論是電腦、手機還是各類移動終端&#xff0c;都能完美適配&#xff0c;無縫對接。令…

騰訊云EdgeOne免費套餐:零成本開啟網站加速與安全防護

騰訊云EdgeOne免費套餐&#xff1a;零成本開啟網站加速與安全防護 ?一鍵解鎖全球3200節點&#xff0c;讓網站速度提升53%&#xff0c;同時獲得企業級安全防護作為一名站長或個人開發者&#xff0c;你是否曾為網站加載速度緩慢而苦惱&#xff1f;是否擔心網站遭遇DDoS攻擊或惡意…

服務器數據恢復—Raid6陣列崩潰導致上層分區無法訪問的數據恢復案例

服務器存儲數據恢復環境&#xff1a; 一臺infortrend某型號存儲&#xff0c;存儲設備上有12塊硬盤&#xff0c;組建一組raid6磁盤陣列。陣列上層有一個lun&#xff0c;映射到WINDOWS系統上使用。WINDOWS系統劃分了一個GUID Partition Table分區。服務器存儲故障&#xff1a; 存…

【生產故事會】Kafka 生產環境參數優化實戰案例

Kafka 3.9.1 生產環境參數優化實戰案例(8核32G HDD場景) 一、背景與硬件/業務配置 某企業級全鏈路日志采集平臺需構建高穩定Kafka集群,承擔核心業務日志流轉(涵蓋用戶行為、系統監控、交易鏈路日志),單集群3節點部署,硬件與業務特征如下: 維度 具體配置 硬件配置 C…

推薦 Eclipse Temurin 的 OpenJDK

推薦 Eclipse Temurin 的 OpenJDK 發行版 https://adoptium.net/zh-CN/temurin/releases&#xff0c;是基于其在技術可靠性、生態中立性、許可友好性和社區支持等多個維度的綜合優勢。 以下是詳細的原因&#xff0c;解釋了為什么 Eclipse Temurin 通常是基于 OpenJDK 構建的 J…

分布式3PC理論

目錄 為什么需要 3PC&#xff1f; 核心結論 3PC的優缺點 3PC與 Paxos / Raft 對比 本篇文章內容的前置知識為 分布式2PC理論&#xff0c;如果不了解&#xff0c;可點擊鏈接學習 分布式2PC理論-CSDN博客 為什么需要 3PC&#xff1f; 1) 2PC 的根本問題&#xff1a;阻塞 不…

Web 前端可視化開發工具對比 低代碼平臺、可視化搭建工具、前端可視化編輯器與在線可視化開發環境的實戰分析

在前端開發領域&#xff0c;“可視化”已經成為提升效率和降低門檻的重要方向。從 低代碼平臺 到 前端可視化編輯器&#xff0c;再到 在線可視化開發環境&#xff0c;這些工具都在改變前端的開發方式。 本文將結合真實項目&#xff0c;分析常見的 Web 前端可視化開發工具&#…

單例模式(C++)(錯誤日志實現)

單例模式一、核心原理二、常見的單例模式實現方式1. 懶漢式&#xff08;Lazy Initialization&#xff09;2. 餓漢式&#xff08;Eager Initialization&#xff09;三、關鍵實現細節解析四、單例模式的適用場景與特點使用場景日志工具&#xff08;確保日志寫入的唯一性&#xff…

stm32 鏈接腳本沒有 .gcc_except_table 段也能支持 C++ 異常

stm32 使用 cubemx 生成的 gnu ld 鏈接腳本沒有 .gcc_except_table 段。如下所示 /* ****************************************************************************** ** ** file : LinkerScript.ld ** ** author : Auto-generated by STM32CubeIDE ** ** Abst…

SpringBoot改造MCP服務器(StreamableHTTP)

項目地址&#xff1a; https://gitee.com/kylewka/smart-ai 1 項目說明 MCP&#xff08;Model Context Protocol&#xff09;協議是一個用于 AI 模型和工具之間通信的標準協議。隨著 AI 應用變得越來越復雜并被廣泛部署&#xff0c;原有的通信機制面臨著一系列挑戰。 近期 MCP …

【數學建模】煙幕干擾彈投放策略優化:模型與算法整合框架

煙幕干擾彈投放策略優化&#xff1a;模型與算法整合框架 基于文獻研究和問題需求分析&#xff0c;我們構建了完整的模型與算法整合框架。 一、整體建模框架 1. 核心問題分解 物理層&#xff1a;煙幕彈道運動與擴散特性建模博弈層&#xff1a;導彈識別與決策機制建模優化層&…

結合大數據知識體系對倉庫建模方法總結

傳統的倉庫建模理論&#xff08;如維度建模&#xff09;仍然是基石&#xff0c;但大數據的“4V”特性&#xff08;Volume, Velocity, Variety, Value&#xff09;要求我們對這些方法進行演進和補充。 以下是結合大數據知識體系對倉庫建模方法的總結&#xff1a;一、核心目標&am…

C 語言第一課:hello word c

C 語言第一課&#xff1a;hello word c開發工具創建項目快速學習平臺開發工具 個人推薦使用 jetBrains 公司的 CLion 開發工具下載地址 https://www.jetbrains.com/clion/ 創建項目 編寫代碼 //頭文件 #include <stdio.h>//程序入口 int main(){printf("hello w…

基于Java Spring Boot的云原生TodoList Demo 項目,驗證云原生核心特性

以下是一個基于 Java Spring Boot 的云原生 TodoList Demo 項目&#xff0c;涵蓋 容器化、Kubernetes 編排、CI/CD、可觀測性、彈性擴縮容 等核心云原生特性&#xff0c;代碼簡潔且附詳細操作指南&#xff0c;適合入門學習。項目概覽 目標&#xff1a;實現一個支持增刪改查&…

開源一個輕量級 Go 工具庫:go-commons

項目背景 在日常 Go 開發中&#xff0c;我們經常需要處理字符串操作和系統監控相關的功能。雖然 Go 標準庫提供了基礎的字符串處理能力&#xff0c;但在實際項目中&#xff0c;我們往往需要一些更便捷的工具函數來提高開發效率。 基于"盡可能不使用第三方依賴"的原…

clang(clangd)與arm-linux-gcc、ARMGCC、ICCARM(IAR)、C51編譯器的兼容性

環境&#xff1a;vscodeclangdEIDE開發開發單片機&#xff08;C51 keilMDK IAR&#xff09;。 vscode遠程clangdarm-linux-gcc(交叉編譯工具鏈)。 &#xff08;1&#xff09;首先clang&#xff08;clangd&#xff09;是兼容gcc的&#xff0c;也就是兼容arm-linux-gcc&#xff…