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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…