商城系统通过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”(政务、企业、个人&…...
linux-系统函数
Linux 系统函数详解 Linux 系统函数是用户程序与内核交互的底层接口,通过系统调用(syscall)实现。以下是核心分类及典型函数: 1. 文件操作函数 #include <fcntl.h> int open(const char *pathname, int flags, mode_t mode)…...
如何突破微信设备限制?WeChatPad带来的多设备协同新体验
如何突破微信设备限制?WeChatPad带来的多设备协同新体验 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 问题引入:微信生态的设备枷锁 当代数字生活中,微信已成为不可或缺…...
Closure Library调试技巧:10个高效调试方法提升开发效率
Closure Library调试技巧:10个高效调试方法提升开发效率 【免费下载链接】closure-library Googles common JavaScript library 项目地址: https://gitcode.com/gh_mirrors/cl/closure-library Closure Library是Google开发的强大JavaScript库,提…...
25619+ASMR资源一键获取:让音频收藏效率提升10倍的智能下载工具
25619ASMR资源一键获取:让音频收藏效率提升10倍的智能下载工具 【免费下载链接】asmr-downloader A tool for download asmr media from asmr.one(Thanks for the asmr.one) 项目地址: https://gitcode.com/gh_mirrors/as/asmr-downloader 在数字音频时代&am…...
面试回答第十五问:类加载
类加载简介 类加载是JVM能够识别类信息,分配空间创建对象实例的基础。 类加载一共分为五阶段,分别是加载,验证,准备,解析,初始化五阶段。这不是顺序,不是加载之后才能验证,验证之后才…...
Shell脚本实战指南:从零基础到自动化高手
1. Shell脚本入门:从Hello World到实战 第一次接触Shell脚本时,我和大多数人一样,被那些神秘的符号和命令搞得一头雾水。直到我意识到,Shell脚本其实就是把平时在终端里手动输入的命令,写进一个文件里自动执行。举个例…...
10大好用的班组建设系统盘点!助力企业高效开展班组建设
在2026年数字化转型的深水区,班组建设系统已成为企业夯实基层管理、提升执行力的核心引擎。面对市场上琳琅满目的工具,如何筛选出真正好用的班组建设系统,切实助力企业高效开展班组建设,是管理者面临的首要难题。本文深度盘点10大…...
Fun-Rec:从零到一构建推荐系统的完整学习路径
Fun-Rec:从零到一构建推荐系统的完整学习路径 【免费下载链接】fun-rec 推荐系统入门教程,在线阅读地址:https://datawhalechina.github.io/fun-rec/ 项目地址: https://gitcode.com/datawhalechina/fun-rec 当推荐系统成为互联网产品…...
Lingbot-Depth-Pretrain-ViTL-14 实战:Python爬虫获取图像数据并生成深度图
Lingbot-Depth-Pretrain-ViTL-14 实战:Python爬虫获取图像数据并生成深度图 你是不是也遇到过这样的场景:手头有一个很棒的深度估计模型,比如 Lingbot-Depth-Pretrain-ViTL-14,想用它来为自己的项目生成深度图,却发现…...
如何快速上手VNote:跨平台Markdown笔记软件的完整指南
如何快速上手VNote:跨平台Markdown笔记软件的完整指南 【免费下载链接】vnote A pleasant note-taking platform. 项目地址: https://gitcode.com/gh_mirrors/vn/vnote VNote是一款基于Qt开发的免费开源Markdown笔记应用,专为追求高效编辑体验的用…...
