Seata 2.x 系列【6】微服务项目搭建

有道无术,术尚可求,有术无道,止于术。

本系列Seata 版本 2.0.0

本系列Spring Boot 版本 3.2.0

本系列Spring Cloud 版本 2023.0.0

源码地址:https://gitee.com/pearl-organization/study-seata-demo

文章目录

    • 1. 概述
    • 2. 数据库
    • 3. 项目搭建
      • 3.1 引入依赖
      • 3.2 配置
      • 3.3 业务代码
      • 3.4 测试

1. 概述

接下来我们使用Spring Cloud Alibaba 微服务框架,搭建一个测试项目,模拟电商用户下单操作:
在这里插入图片描述

2. 数据库

使用的是Mysql 8.0.29,首先创建三个数据库:

  • seata_account:账户
  • seata_order:订单
  • seata_stock:库存

seata_account库插入t_account表:

CREATE TABLE `t_account` (`id` int NOT NULL AUTO_INCREMENT,`user_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`amount` double(14,2) DEFAULT '0.00',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;INSERT INTO t_account
(user_id, amount)
VALUES(1, 10000.00);

seata_order库插入t_order表:

CREATE TABLE `t_order` (`id` int NOT NULL AUTO_INCREMENT,`order_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`user_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`commodity_code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`count` int DEFAULT '0',`amount` double(14,2) DEFAULT '0.00',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

seata_stock库插入t_stock表:

CREATE TABLE `t_stock` (`id` int NOT NULL AUTO_INCREMENT,`commodity_code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`count` int DEFAULT '0',PRIMARY KEY (`id`),UNIQUE KEY `commodity_code` (`commodity_code`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;INSERT INTO t_stock
(commodity_code, name, count)
VALUES('IPHONE', '苹果手机', 10000);

3. 项目搭建

项目技术栈:

  • JDK 17(自行安装)
  • Maven 3.6.3
  • Mybatis Plus 3.5.5
  • Nacos 2.0(自行安装)
  • Spring Boot 3.2.0
  • Spring Cloud 2023.0.0
  • Spring Cloud Alibaba 2023.0.0.0-RC1

使用Spring Initializr创建一个多模块微服务项目:
在这里插入图片描述
各个模块介绍:

  • spring-cloud-demo:父项目
  • common:公共模块
  • business:业务服务
  • stock:库存服务
  • order:订单服务
  • account:账户服务

3.1 引入依赖

spring-cloud-demo作为父项目,引入依赖管理:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.pearl</groupId><artifactId>spring-cloud-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-cloud-demo</name><description>spring-cloud-demo</description><packaging>pom</packaging><properties><java.version>17</java.version><skipTests>true</skipTests><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><modules><module>account</module><module>business</module><module>order</module><module>stock</module><module>common</module></modules><!--依赖版本管理--><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.0</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2023.0.0</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.0.0-RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

Spring BootSpring Cloud的对应关系可以参考官网:
在这里插入图片描述
Spring Cloud Alibaba最新的预发布版本2023.0.0.0-RC1才开始支持Spring Boot 3.2Spring Cloud 2023.0.0,因为是学习所以采用最新版本,其他版本兼容性可参考官网。
在这里插入图片描述

common模块引入业务模块需要的公共依赖:

    <!--公共依赖--><dependencies><!--Spring Boot Web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--工具--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.21</version></dependency><!--Mybatis Plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!--Spring Cloud--><!-- Nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--Loadbalancer--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency><!--Open Feign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies>

各个业务模块引入common

        <dependency><groupId>com.pearl</groupId><artifactId>common</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

3.2 配置

各个业务模块在application.yml中添加端口号、服务名称、Nacos注册地址、数据源:

server:port: 8503
spring:application:name: stockcloud:nacos:discovery:namespace: 7032916a-19f1-482e-a3eb-8a62226c2e4dserver-addr: 127.0.0.1:8848datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/seata_stock?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=trueusername: rootpassword: 123456

3.3 业务代码

在项目中添加电商用户下单业务代码,由于这些代码很简单,直接参考案例源码即可。

3.4 测试

启动Nacos、各个业务后台,查看Nacos控制台:
在这里插入图片描述
访问下单接口http://localhost:8080/business/buy,检查程序是否报错,各个业务表的数据是否正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/537426.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯t-design 实现图片预览组件的显示和使用

腾讯t-design 发布了 下面介绍一个组件的使用 图片预览 <template><div><div class"tdesign-demo-image-viewer__base"><t-image-viewer :images"[img]"><template #trigger"{ open }"><div class"tde…

three.js 鼠标左右拖动改变玩家视角

这里主要用到了 一个方法 obj.getWorldDirection(); obj.getWorldDirection()表示的获取obj对象自身z轴正方向在世界坐标空间中的方向。 按下 W键前进运动&#xff1b; <template><div><el-container><el-main><div class"box-card-left…

基于Java的天然气工程运维系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司&#xff08;施工单位&#xff09;功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

python基于flask考研学习交流系统30vy7附源码django

考研在线学习与交流平台根据实际情况分为前后台两部分&#xff0c;前台部分主要是让用户使用的&#xff0c;包括用户的注册登录&#xff0c;首页&#xff0c;课程信息&#xff0c;在线讨论&#xff0c;系统公告&#xff0c;后台管理&#xff0c;个人中心等功能&#xff1b;后台…

【数据结构与算法】排序

目 录 一.排序的概念及引用1.1 排序的概念1.2 常见的排序算法 二.常见排序算法的实现2.1 插入排序直接插入排序希尔排序( 缩小增量排序 ) 2.2 选择排序直接选择排序堆排序 2.3 交换排序冒泡排序快速排序快速排序优化&#xff1a;非递归实现快速排序 2.4归并排序2.4.3 海量数据的…

arthas 常用命令详解(dashboard、thread、jad、redefine等)

上文中我们介绍了arthas安装和基本命令查看&#xff0c;本文详细介绍各个命令的使用方式。我们在启动arthas的时候&#xff0c;arthas会将监控的java进程展示出来&#xff0c;我们需要选择一个进程进入监控状态。 1、基础命令 命令说明示例help查看命令帮助信息helpcat 打印文…

目标追踪DeepSort算法原理浅析

前言 背景&#xff1a;DeepSort是基于Sort目标跟踪进行的改进&#xff0c;它引入深度学习模型&#xff0c;在实时目标跟踪过程中&#xff0c;提取目标的外观特征进行最近邻近匹配。 目的&#xff1a;改善有遮挡情况下的目标追踪效果&#xff1b;同时&#xff0c;也减少了目标I…

ubuntu 下git常用指令【持续更新中】

1.下载 sudo apt install git 2. 查看版本 git --version3. 登录git账号 git config --global user.email "youexample.com" git config --global user.name "Your Name"4.生成密钥对 ssh-keygen -t rsa -C "your_emailyouremail.com"复制公…

证券公司如何应对大数据调度系统的高负载挑战

​在金融行业&#xff0c;数据处理和任务调度是日常运营的重要组成部分。随着业务量的激增&#xff0c;日益增长的任务量和复杂的资源管理需求&#xff0c;要求该系统不仅要稳如磐石&#xff0c;还需灵活高效。 本文将探讨某证券公司在应对这些挑战时所采用的策略&#xff0c;并…

拼图小游戏制作教程:用HTML5和JavaScript打造经典游戏

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Redis 内存的优化

目录 前言 Redis 的内存碎片问题 判断Redis 内存碎片 如何清理内存碎片&#xff1f; 前言 我想讲一下怎么提高Redis 内存的利用率&#xff0c;redis 的数据是保存在内存中。对内存的利用率低&#xff0c;意味着存的数据很少&#xff0c;并不意味着就没有内存了&#xff0c…

Maven深入了解

Maven深入了解 前言一、Maven的核心概念1.1 Maven-Jar包模块化管理1.2 POM1.3 坐标及其命名规范1.4 仓库的概念1.5 生命周期1.6 插件和目标 二、依赖管理2.1 自己写的模块和模块之间也可以互相依赖2.2 依赖的生效范围(scope标签)2.3 依赖的传递性2.4 依赖冲突问题2.5 依赖的排除…