当前位置: 首页 > news >正文

【Spring Cloud 整合Nacos和Seata实现分布式事务】

Spring Cloud 整合Nacos和Seata实现分布式事务

  • 缘起
  • 技术及组件
  • 基础服务组件安装
    • nacos安装
    • seata安装
  • spring Cloud相关
    • 微服务划分
  • 测试

缘起

从网上下载的艿艿的整合的Spring Cloud 整合Nacos和Seata实现分布式事务代码,但是因为版本与现在的不统一,导致一直都没测试成功。现在记录下来,方便后面查看。

技术及组件

  • spring cloud
  • spring boot
  • nacos 2.5.1
  • seata 2.4.0

基础服务组件安装

nacos安装

  1. 从网上下载安装包。参考官网https://nacos.io/ 我这里使用的是 2.5.1
  2. 执行数据库脚本。
  3. 修改application.properties配置文件。
spring.sql.init.platform=mysql
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=root
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token (Base64 String):
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey0123456789012345678901234567890123456789
  1. 修改cluster.conf配置文件,这里是配置集群的ip地址列表,因为只有一台,这里就配置本地ip+8848端口号。
192.168.1.115:8848
  1. 启动nacos startup.cmd
    在这里插入图片描述
  2. 配置中心新增配置:seataServer.properties
# Seata Server 配置
store.mode=db
store.db.datasource=druid
store.db.db-type=mysql
store.db.driver-class-name=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata
store.db.user=root
store.db.password=root
service.vgroupMapping.order-service-group=default
service.vgroupMapping.default_tx_group=default

在这里插入图片描述
在这里插入图片描述

seata安装

  1. 从网上下载安装包。参考官网https://seata.apache.org/zh-cn/ 我这里使用的是 2.4.0(2.5.0本地一直报错,所以用了2.4.0)

  2. 执行数据库脚本。

  3. mysql包添加。我本地mysql是8.0的。需要copy个包到lib下。
    在这里插入图片描述

  4. 修改application.yml(D:\servers\apache-seata-2.4.0-incubating-bin\seata-server\conf)配置文件

server:port: 7091
spring:application:name: seata-server
logging:level:io.seata: debug  config: classpath:logback-spring.xmlfile:path: ${log.home:${user.home}/logs/seata}extend:logstash-appender:# off by defaultenabled: falsedestination: 127.0.0.1:4560kafka-appender:# off by defaultenabled: falsebootstrap-servers: 127.0.0.1:9092topic: logback_to_logstashproducer:acks: 0linger-ms: 1000max-block-ms: 0metric-appender:# off by defaultenabled: false
seata:config:type: nacosnacos:server-addr: 127.0.0.11:8848namespace: ''#group: SEATA_GROUPcontext-path:username: 'nacos'password: 'nacos'data-id: seataServer.propertiesregistry:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848username: nacospassword: nacosnamespace: cluster: default  # 集群名称group: SEATA_GROUPstore:# support: file 、 db 、 redis 、 raftmode: dbsession:mode: dblock:mode: dbdb:datasource: druiddb-type: mysqldriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=trueuser: rootpassword: rootmin-conn: 10max-conn: 100global-table: global_tablebranch-table: branch_tablelock-table: lock_tabledistributed-lock-table: distributed_lockvgroup-table: vgroup_tablequery-limit: 1000max-wait: 5000druid:time-between-eviction-runs-millis: 120000min-evictable-idle-time-millis: 300000test-while-idle: truetest-on-borrow: falsekeep-alive: falsehikari:idle-timeout: 600000keepalive-time: 120000max-lifetime: 1800000validation-timeout: 5000dbcp:time-between-eviction-runs-millis: 120000min-evictable-idle-time-millis: 300000test-while-idle: truetest-on-borrow: false    
  1. seata启动
    在这里插入图片描述

spring Cloud相关

项目源代码参考:

微服务划分

  • 订单服务 order service 源地址
  • 商品服务 product service 源地址
  • 账户服务 account service 源地址
  1. 原项目代码中用的spring boot cloud,nacos,seata版本比较老。需要替换一下。 这里以order-service服务的pom.xml作为示例:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>labx-17-sc-seata-at-feign-demo</artifactId><groupId>cn.iocoder.springboot.labs</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>labx-17-sc-seata-at-feign-demo-order-service</artifactId><properties><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.source>1.8</maven.compiler.source><spring.boot.version>2.4.0</spring.boot.version><spring.cloud.version>2020.0.0</spring.cloud.version><spring.cloud.alibaba.version>2021.1</spring.cloud.alibaba.version></properties><!--引入 Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系--><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- 实现对 Spring MVC 的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 实现对数据库连接池的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency> <!-- 本示例,我们使用 MySQL --><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><!-- 实现对 MyBatis 的自动化配置 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.2</version></dependency><!-- 引入 Spring Cloud Alibaba Seata 相关依赖,使用 Seata 实现分布式事务,并实现对其的自动配置 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-seata</artifactId><version>2021.1</version></dependency><dependency> <!-- 主要想使用 seata 1.1.0 版本 --><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.5.2</version></dependency><!-- 引入 Spring Cloud Alibaba Nacos Discovery 相关依赖,将 Nacos 作为注册中心,并实现对其的自动配置 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.1</version></dependency><!-- 引入 Spring Cloud OpenFeign 相关依赖,使用 OpenFeign 提供声明式调用,并实现对其的自动配置 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies></project>
  1. 修改application.yaml文件
server:port: 8081 # 端口spring:application:name: order-servicedatasource:url: jdbc:mysql://127.0.0.1:3306/seata_order?useSSL=false&useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: rootcloud:# Nacos 作为注册中心的配置项nacos:discovery:server-addr: 127.0.0.1:8848username: nacospassword: nacos
#        group: SEATA_GROUP# Seata 配置项,对应 SeataProperties 类
seata:application-id: ${spring.application.name} # Seata 应用编号,默认为 ${spring.application.name}tx-service-group: default_tx_group #order-service-group # Seata 事务组编号,用于 TC 集群名# Seata 服务配置项,对应 ServiceProperties 类service:# 虚拟组和分组的映射vgroup-mapping:default_tx_group: default# Seata 注册中心配置项,对应 RegistryProperties 类registry:type: nacos # 注册中心类型,默认为 filenacos:serverAddr: 127.0.0.1:8848 # Nacos 服务地址application: seata-servernamespace: ""username: nacospassword: nacosgroup: SEATA_GROUPcluster: default # 使用的 Seata 分组
#      namespace: # Nacos 命名空间
  1. 其他服务也参考这两个配置文件启动一下。

测试

在浏览器地址栏输入测试地址

http://localhost:8081/order/create?userId=1&productId=1&price=2

页面返回内容
在这里插入图片描述

订单服务日志打印情况:
在这里插入图片描述
账号服务日志打印:
在这里插入图片描述
产品服务日志打印:
在这里插入图片描述

http://www.dtcms.com/a/609722.html

相关文章:

  • LeetCode hot100:4.寻找两个正序数组的中位数 题解分析
  • 邦邻营销型网站建设运城建设银行网站
  • docker(25) : 银河麒麟 V10离线安装docker
  • mysql 网站空间壹淘购返利网
  • 小鹏VLA 2.0的“神秘涌现”:从痛苦到突破,自动驾驶与机器人如何突然“开窍”?
  • 第五章《Android 数据存储》
  • Axios 与 HTTP 状态码:构建健壮前端请求体系的完整指南
  • acos支持mcp,内置mcp server支持让注册到r-nacos的普通http接口通过r-nacos直接转化成mcp服务对外提供服务。
  • HTTP头信息相关知识了解
  • 做淘客app要网站吗建设工程师交易网站
  • 泛型擦除与桥接方法
  • 深度相机kinect拍摄的.mkv深度视频为什么特别大,mkv文件中含有什么数据,以及数据格式是什么
  • 带数据库网站设计金桥网站建设
  • 国内网站如何做流量网络营销怎么做有特色
  • ios卡顿优化
  • 4G/5G参考信号详解
  • wordpress 子站点宁波人流医院哪家好
  • Unity热更新——AB包和Lua
  • jail瘦虚拟机创立实践@FreeBSD14.3
  • 科技有限公司网站企业信用公示信息网
  • ATT 语法 x86-64 汇编核心知识点总结(附实战案例)
  • 点量云流突破架构壁垒,实现全栈信创自主可控
  • C语言编译成汇编 | 深入理解编译过程与底层实现
  • 一个网站源码值多少钱网站建设初期目标
  • list集合使用
  • DuoPlus更新|新增云手机自定义SIM号码、代理备注等多重功能!
  • 安卓手机/平板/TV版 Rotation强制横屏显示工具!免ROOT可用!再推荐突破手机限制的3款神器
  • Gopeed+cpolar:跨平台下载任务的云端穿透解决方案
  • 手机Basic语言编译器 | 专为手机开发的编程工具与应用场景分析
  • 驾校网站建设滴滴友链