商城系统通过Kafka消息队列,实现订单的处理和状态更新
以下是一个简单的Spring Boot应用程序示例,演示如何使用Kafka实现订单的处理和状态更新。
首先,我们创建一个名为“order”的topic,在application.yaml配置文件中添加Kafka的配置:
spring:kafka:bootstrap-servers: localhost:9092consumer:group-id: order-groupauto-offset-reset: earliestproducer:value-serializer: org.apache.kafka.common.serialization.StringSerializertemplate:default-topic: order
在这里,我们指定了Kafka的地址和消费者组ID,并设置了生产者消息的序列化器和默认主题为“order”。
接下来,我们创建一个名为“Order”的Java类,来表示订单对象:
public class Order {private String orderId;private String userId;private String productId;private int quantity;private double price;private OrderStatus status;private String createTime;// getter、setter、toString
}
此外,我们还需要一个枚举类来表示订单的状态:
public enum OrderStatus {CREATED, PAID, CANCELLED, COMPLETED
}
然后,我们创建一个名为“OrderMessage”的Java类,来表示消息对象:
public class OrderMessage {private Order order;private OrderStatus status;// getter、setter、toString
}
接下来,我们创建一个名为“OrderService”的Java类,来处理订单的创建和状态更新操作:
@Service
public class OrderService {@Autowiredprivate KafkaTemplate<String, String> kafkaTemplate;public void createOrder(Order order) {// 1、将订单信息发送到“order”主题中kafkaTemplate.send("order", order.toString());// 2、更新订单状态为“待支付”OrderMessage message = new OrderMessage();message.setOrder(order);message.setStatus(OrderStatus.CREATED);// 3、将订单状态更新消息发送到“order-status-update”主题中kafkaTemplate.send("order-status-update", message.toString());}@KafkaListener(topics = "order-status-update")public void handleOrderStatusUpdate(String message) {// 1、获取订单状态更新消息OrderMessage orderMessage = convertToOrderMessage(message);// 2、更新订单状态OrderStatus status = orderMessage.getStatus();Order order = orderMessage.getOrder();// 3、将订单信息更新到数据库中updateOrderStatus(order, status);// 4、如果订单状态为“已支付”,则执行后续操作if (status == OrderStatus.PAID) {// 生成物流信息generateLogisticsInfo(order);// 发送支付成功通知sendPaymentSuccessNotification(order);}}private OrderMessage convertToOrderMessage(String message) {// 解析订单状态更新消息ObjectMapper mapper = new ObjectMapper();try {return mapper.readValue(message, OrderMessage.class);} catch (Exception e) {throw new RuntimeException("Failed to convert message to OrderMessage: " + message, e);}}private void updateOrderStatus(Order order, OrderStatus status) {// 更新订单状态到数据库中}private void generateLogisticsInfo(Order order) {// 生成物流信息}private void sendPaymentSuccessNotification(Order order) {// 发送支付成功通知,可以通过发短信,邮箱通知}
}
在这里,我们使用了@Autowired注解注入了KafkaTemplate对象,它是一个用于发送消息到Kafka的模板类。createOrder方法中,我们首先将订单信息发送到“order”主题中,然后更新订单状态为“待支付”,并将订单状态更新消息发送到“order-status-update”主题中。handleOrderStatusUpdate方法使用@KafkaListener注解订阅了“order-status-update”主题,当有新的订单状态更新消息到达时,会自动触发该方法。在该方法中,我们获取订单状态更新消息,更新订单状态,并将订单信息更新到数据库中。如果订单状态为“已支付”,则会执行后续操作,例如生成物流信息、发送支付成功通知等。
最后,我们可以编写一个简单的Controller类,来接收用户的下单请求:
@RestController
public class OrderController {@Autowiredprivate OrderService orderService;@PostMapping("/order")public ResponseEntity<?> createOrder(@RequestBody Order order) {orderService.createOrder(order);return ResponseEntity.ok().build();}
}
在这里,我们使用了@PostMapping注解来定义HTTP POST请求,接收一个Order对象作为请求体。当有新的下单请求到达时,我们会调用OrderService的createOrder方法,将订单信息发送到Kafka中,并返回一个成功响应。
到此,我们就完成了通过Kafka消息队列,实现订单的处理和状态更新的代码示例。
相关文章:
商城系统通过Kafka消息队列,实现订单的处理和状态更新
以下是一个简单的Spring Boot应用程序示例,演示如何使用Kafka实现订单的处理和状态更新。 首先,我们创建一个名为“order”的topic,在application.yaml配置文件中添加Kafka的配置: spring:kafka:bootstrap-servers: localhost:9…...
IntelRealSense深度相机D455在ROS1运行中的消息内容
IntelRealSense深度相机D455在ROS1运行中的消息内容 通过下面命令所有相关信息通过ros topic的方式发布出去rosnode查看rqt_graph查看rostopic查看通过下面命令直接查看RVIZ中点云信息rosnode查看rqt_graph查看rostopic查看 Physical Port:: /sys/devices/pci0000:0…...
公有云迁移研究——AWS Translate
大纲 1 什么是Translate2 Aws Translate是怎么运作的3 Aws Translate和Google Translate的区别4 迁移任务4.1 迁移原因 5 Aws Translate的Go demo6 迁移中遇到的问题6.1 账号和权限问题:6.2 小语种 1 什么是Translate Translate是一种文本翻译服务,它使…...
【laBVIEW学习】4.声音播放,自定义图标,滚动条设置,保存参数以及恢复参数
一。声音播放(报错,未实现) 1.报错4810 2.解决方法: 暂时未解决。 二。图片修改 1.目标:灯泡---》自定义灯泡 2.步骤: 1.右键点击--》自定义运行 表示可以制作自定义类型 2.右键--》打开自定义类型 这样就…...
《论文阅读》使用条件变分自动编码器学习神经对话模型的语篇水平多样性 2017 ACL
《论文阅读》使用条件变分自动编码器学习神经对话模型的语篇水平多样性 2017 ACL 前言简介相关知识Stochastic Gradient Variational BayesMultivariate Gaussian DistributionIsotropic Gaussian DistributionReparameterization Trickprior network & posterior network …...
【win32_003】不同字符集下的通用字符串语法TCHAR、TEXT、PTSTR、PCTSTR
TCHAR 通用 根据项目属性是否使用Unicode字符集,TCHAR被解释为CHAR(char)或WCHAR(wchar_t)数据类型。 TCHAR a ‘A’ ; TCHAR arr [] TEXT(“AA”); TCHAR arr [100] TEXT(“AA”); TCHAR *pstr TEXT(“AA”); TEXT宏 #ifdef UNICODE #define __TEXT(quote) L#…...
《漫长的等待》—— 读后感
前几天下班地铁上,人太多,看技术书籍看不进去,翻阅微信读书,看到了这本书,看了几章免费的章节,因为后续需要买会员就没有继续读,但是这几天偶尔还是会想到书籍中的情节,所以今天充了…...
基于ROPNet项目训练modelnet40数据集进行3d点云的配置
项目地址: https://github.com/zhulf0804/ROPNet 在 MVP Registration Challenge (ICCV Workshop 2021)(ICCV Workshop 2021)中获得了第二名。项目可以在win10环境下运行。 论文地址: https://arxiv.org/abs/2107.02583 网络简介…...
力扣215. 数组中的第K个最大元素
堆排序 前言 面试中著名的 TopK 排序;常见的解法有冒泡排序、堆排序;更深入的思路可以参考:拜托,面试别再问我TopK了!!!使用了堆排序的算法,关于堆可以参考:堆数据结构的…...
轻量封装WebGPU渲染系统示例<40>- 多层材质的Mask混合(源码)
当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/MaskTextureEffect.ts 当前示例运行效果: 两层材质效果: 三层材质效果: 此示例基于此渲染系统实现,当前示例TypeScript源码如下: export c…...
程序员的实用网站导航与推荐
当你遇到问题时 Stack Overflow:订阅他们的每周新闻和任何你感兴趣的主题Google:全球最大搜索引擎必应:在你无法使用Google的时候CSDN:聊胜于无AI导航一号AI导航二号 新闻篇 OSCHINA:中文开源技术交流社区 针对初学…...
上午面了个腾讯拿 38K 出来的,让我见识到了基础的天花板
今年的校招基本已经进入大规模的开奖季了,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好…...
【halcon】C# halcon 内存暴增
1 读取图片需要及时手动释放 一个6M的图片通过halcon进行加载,大约会消耗200M的内存,如果等待GC回收,而你又在不停的读取图片,你的内存占用,将在短时间内飙升。 2 halcon控件显示图片需要清空。 /// <summary>…...
LeetCode130. Surrounded Regions
文章目录 一、题目二、题解 一、题目 Given an m x n matrix board containing ‘X’ and ‘O’, capture all regions that are 4-directionally surrounded by ‘X’. A region is captured by flipping all O’s into X’s in that surrounded region. Example 1: Input…...
【实战教程】PHP如何轻松对接腾讯云COS,实现文件上传下载?
腾讯云提供了一系列丰富的云服务,其中包括对象存储(Cloud Object Storage,简称COS),它是一种高可靠性、可扩展性强的云存储服务。本文将介绍如何使用PHP对接腾讯云COS存储服务,实现文件的上传和下载功能。 …...
pytorch学习10-网络模型的保存和加载
系列文章目录 pytorch学习1-数据加载以及Tensorboard可视化工具pytorch学习2-Transforms主要方法使用pytorch学习3-torchvisin和Dataloader的使用pytorch学习4-简易卷积实现pytorch学习5-最大池化层的使用pytorch学习6-非线性变换(ReLU和sigmoid)pytorc…...
SQL Server 2016(分离和附加数据库)
1、实验环境。 基于上一个实验《SQL Server(创建数据库)》 2、需求描述。 class数据库的数据文件和事务日志文件都位于C:\db_class目录下。现在需要把class数据库的数据文件和事务日志文件分开存放,数据文件class.mdf存放于原位置࿰…...
用友U8 Cloud RegisterServlet SQL注入漏洞复现
0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。 0x02 漏洞概述 用友U8 Cloud RegisterServlet接口处存在SQL注入漏洞,未授权的攻击者可通过此漏洞获取数据库权限,从而盗取用户数据,造成用户信息泄露。 …...
coding创建远程分支。并拉取远程新分支+推送代码
进入coding ----项目----代码仓库---点击 下拉之后查看全部----创建分支 创建分支之后执行下面命令 git branch -a // 查看所有分支 这个时候发现自己创建的分支没有显示这是因为自己在远程创建了分支但是本地还没有分支 执行 git fetch命令 用于从远程仓库获取最新的提交…...
坚鹏:中国工商银行内蒙古分行数字化转型发展现状与成功案例培训
中国工商银行围绕“数字生态、数字资产、数字技术、数字基建、数字基因”五维布局,深入推进数字化转型,加快形成体系化、生态化实施路径,促进科技与业务加速融合,以“数字工行”建设推动“GBC”(政务、企业、个人&…...
WarcraftHelper终极指南:魔兽争霸3优化工具完整教程
WarcraftHelper终极指南:魔兽争霸3优化工具完整教程 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸III》的陈旧限制而烦…...
从零解析ST电机库FOC:核心算法与工程实现
1. FOC技术基础:从三相电流到旋转磁场 我第一次接触FOC(Field Oriented Control)时,被那些复杂的数学公式搞得头晕目眩。直到有一天,我把无刷电机想象成小时候玩的磁铁小车,突然就明白了其中的奥妙。FOC本质…...
FS8024A芯片实现USB-C PD诱骗:打造TYPE-C转DC电源转接头方案
1. 项目概述:一个“小接口”背后的大世界 最近在折腾一个便携显示器项目,手头有现成的12V驱动板,但供电却成了麻烦事。现在谁还愿意随身带个笨重的12V电源适配器?满世界都是USB-C接口的充电宝和笔记本充电器。于是,一个…...
面试时被问“你的缺点是什么”,这样回答反而加分
面试中,当面试官看似随意地问出“你的缺点是什么”时,空气往往会突然安静几秒。对软件测试工程师而言,这个问题尤其微妙——我们每天都在和“找茬”打交道,对缺陷和风险有着本能的敏感。然而,面试官抛出这个问题&#…...
RAG系统评估实战:使用renumics-rag进行量化分析与性能优化
1. 项目概述:一个为RAG应用量身定制的开源评估工具如果你正在构建或优化一个基于检索增强生成(RAG)的系统,那么你大概率会遇到一个核心痛点:如何科学、量化地评估它的好坏?是看它回答得“像不像人”&#x…...
从Starpod项目解析个人AI工作流引擎:架构、实现与应用
1. 项目概述:从“星荚”到个人AI工作流引擎最近在AI工具圈里,一个名为sinaptik-ai/starpod的项目引起了我的注意。乍一看这个标题,可能会觉得有些抽象——“星荚”是什么?AI“豆荚”?但当你深入其GitHub仓库࿰…...
嵌入式Linux动态引脚复用实战:RK3568 GPIO与I2C功能切换详解
1. 项目概述与核心价值在嵌入式Linux开发中,尤其是基于瑞芯微RK3568这类高度集成的SoC平台,引脚复用(Pin Mux)的管理是驱动开发者的基本功,也是从“会用”到“精通”的关键分水岭。很多朋友在初次接触时,往…...
AM335x嵌入式开发实战:从硬件设计到软件调试的避坑指南
1. 项目概述:为什么AM335x值得深挖,又为何“坑”多?如果你正在嵌入式领域,尤其是工业控制、人机交互或者物联网网关这些方向选型,TI的AM335x系列处理器大概率会进入你的视野。这颗基于ARM Cortex-A8内核的芯片…...
Python 内置函数:性能优势与使用技巧
Python 内置函数:性能优势与使用技巧 1. 技术分析 1.1 内置函数优势 Python内置函数由C实现,具有显著性能优势: 内置函数特点C实现: 底层用C编写优化: 经过高度优化内存效率: 内存使用更高效类型优化: 针对特定类型优化1.2 常用内置函数分类 …...
明日方舟游戏资源库:2000+高清素材的完整获取与应用指南
明日方舟游戏资源库:2000高清素材的完整获取与应用指南 【免费下载链接】ArknightsGameResource 明日方舟客户端素材 项目地址: https://gitcode.com/gh_mirrors/ar/ArknightsGameResource 还在为寻找高质量的明日方舟游戏素材而烦恼吗?无论是创作…...
