微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot

这篇具有很好参考价值的文章主要介绍了微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

本文以seata-server-1.5.2,以配置中心、注册中心使用Nacos,store.mode=db(mysql)为例进行操作。
Seata简介及入门参看:SpringCloud入门实战(十五)分布式事务框架Seata简介

一、Seata Server端

1、下载seata server

链接: http://seata.io/zh-cn/blog/download.html下载压缩包,解压至非中文目录。

本文版本环境:
Spring Cloud Alibaba 2021.0.4.0
Spring Boot 2.6.11
Nacos 2.2.1
Seata1.5.2

下载版本参考之前我们提到的:SpringBoot、SpringCloud、Spring Cloud Alibaba版本对照表(详细准确)选择适合自己环境的版本。

微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos
解压后可以发现原来的conf/registry.conf配置文件没有了,可直接修改application.yml进行配置。

2、客户端配置-application.yml

配置application.yml(低版本的是file.conf+registry.conf文件),主要配置config:配置中心部分及registry:注册中心部分。

server:
  port: 7091

spring:
  application:
    name: seata-server
# 日志配置
logging:
  config: classpath:logback-spring.xml
  file:
    path: ${user.home}/logs/seata
  # 不外接日志,故如下配置可暂不考虑
  extend:
    logstash-appender:
      destination: 127.0.0.1:4560
    kafka-appender:
      bootstrap-servers: 127.0.0.1:9092
      topic: logback_to_logstash
# 新增加的console控制台,
# 可通过访问http://localhost:7091进行登录,账号如下seata/seata
console:
  user:
    username: seata
    password: seata

seata:
  # Seata接入Nacos配置中心
  config:
    # support: file, nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      namespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189
      group: SEATA_GROUP
      username: nacos
      password: nacos
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
  # Seata接入Nacos服务注册中心
  registry:
    # support: file, nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189
      cluster: default
      username: nacos
      password: nacos
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
  # 此处可不必配置,由于接入了nacos配置,以下store相关配置可直接通过seataServer.properties进行配置
  # store:
    # support: file 、 db 、 redis
    # mode: db
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

Tip:seata 版本客户端和服务端最好还保持一样

3、初始Mysql数据库

新建seata库->执行mysql.sql初始化脚本->【Seata 1.5版本mysql脚本】压缩包目录seata/script/db/mysql.sql

微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

4、导入初始配置到nacos

1)先任意模式启动nacos,不清楚的参看:nacos安装运行,本文使用单机模式运行nacos。

moon@moondeiMac  ~  %  cd /Users/moon/Downloads/nacos-2.2.1/distribution/target/nacos-server-2.2.1/nacos/bin
moon@moondeiMac bin % sh startup.sh -m standalone

2)新建一个namespace用于本地开发使用eg:dev

微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

3)修改压缩包目录seata/script/config-center/config.txt文件中几处内容:

# 存储模式
store.mode=db
 
store.db.datasource=druid
store.db.dbType=mysql
# 需要根据mysql的版本调整driverClassName
# mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
# mysql8以下版本的driver:com.mysql.jdbc.Driver
store.db.driverClassName=com.mysql.jdbc.Driver
# 注意根据生产实际情况调整参数host和port
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
# 数据库用户名密码
store.db.user=root
store.db.password=12345678
# 微服务里配置与这里一致
service.vgroupMapping.dev_tx_group=default

特别说明下📢:
配置事务分组service.vgroupMapping.dev_tx_group=default
dev_tx_group:需要与客户端保持一致 ,可以自定义
default:需要跟客户端和application.yml中的cluster保持一致
default 必须要等于 registry.conf cluster = “default”

4)官方推荐通过压缩包目录seatascript/config-center/nacos/nacos-config.sh将修改后的config.txt发布到nacos上

# 运行指令 ,通过 Git Bash Here
sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 891d7906-dd03-4b8c-9fe9-a1f0609b3189

# 具体说明参见:http://seata.io/zh-cn/docs/user/configurations.html
# -h: nacos host,默认localhost
# -p: nacos端口,默认8848
# -g: nacos分组,默认'SEATA_GROUP'.
# -t: 租户信息Tenant information,对应nacos namespace ID,默认''
# -u: nacos用户名,默认''
# -w: nacos用户密码,默认''

5)导入结果:

namespace: dev
group: SEATA_GROUP
配置项变成了N个,每项都可单独修改。

微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

5、启动测试

进入seata/bin 目录下,执行命令:

sh seata-server.sh 

可以看到seata-server成功注入nacos,至此Seata Server端处理完毕。
微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

二、Seata Client端搭建

1、为示例业务创建表

以用户购买商品的业务逻辑为例搭建微服务系统:
仓储服务(Stock):对给定的商品扣除仓储数量。
订单服务(Order):根据采购需求创建订单。
账户服务(Account):从用户账户中扣除余额。
微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos
三个独立的应用,分别使用三个独立的数据源。

为示例业务创建库、表,及每个库增加undo_log表,执行脚本
微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

注意📢:每个业务数据库都要有UNDO_LOG

微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

2、业务代码集成 Seata

源码:项目源码

微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

1)父pom引入依赖:

 <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-dependencies</artifactId>
          <version>2021.0.4</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
        <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-dependencies</artifactId>
          <version>2021.0.4.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>2.6.11</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>

2)子pom引入依赖:

 <!-- seata -->
<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
  <!--seata starter -->
<dependency>
			<groupId>io.seata</groupId>
			<artifactId>seata-spring-boot-starter</artifactId>
</dependency>

 <!--nacos discovery -->
 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>
   <!--nacos config -->
<dependency>
       <groupId>com.alibaba.cloud</groupId>
       <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>
     <!--openfeign -->
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.3</version>
 </dependency>

3)yml文件,其他两个类似:

server:
  port: 2001

spring:
  application:
    name: seata-order-service
  cloud:
    nacos:
      discovery:
        # 服务分组
        group: SEATA_GROUP
        server-addr: http://localhost:8848
        # 必须填命名空间的ID
        namespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource  #当前数据源操作类型
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/seata_order?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false #useSSL安全加固
    username: root
    password: 12345678


# MyBatis Plus配置
mybatis-plus:
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapper-locations: classpath*:mapper/**/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.qytest.springcloud.entitites
  global-config:
    db-config:
      id-type: auto
  configuration:
    # 开启驼峰,开启后,只要数据库字段和对象属性名字母相同,无论中间加多少下划线都可以识别
    map-underscore-to-camel-case: true

# Seata 配置
seata:
  application-id: seata-server
  # 是否启用数据源bean的自动代理
  enable-auto-data-source-proxy: false
  tx-service-group: dev_tx_group  # 必须和服务器配置一样
  registry:
    type: nacos
    nacos:
      # Nacos 服务地址
      server-addr: http://localhost:8848
      group: SEATA_GROUP
      namespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189
      application: seata-server # 必须和服务器配置一样
      username: nacos
      password: nacos
      cluster: default
  config:
    type: nacos
    nacos:
      server-addr: ${spring.cloud.nacos.discovery.server-addr}
      group: SEATA_GROUP
      namespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189
  service:
    vgroup-mapping:
      tx-service-group: dev_tx_group # 必须和服务器配置一样
    disable-global-transaction: false
  client:
    rm:
      # 是否上报成功状态
      report-success-enable: true
      # 重试次数
      report-retry-count: 5


4)编写业务测试类

order通过feign接口调用库存及账户系统接口

@RestController
@RequestMapping("")
@Slf4j
public class OrderController {
    @Resource
    private OrderService orderService;
    @GetMapping("/order/create")
    public CommonResult<Order> create(Order order) {
        orderService.create(order);
        return new CommonResult<Order>(200, "订单创建成功", order);
    }

}

public interface OrderService extends IService<Order> {
    void create(Order order);
}

@Service
@Slf4j
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {

        @Resource
        private StorageService storageService;
        @Resource
        private AccountService accountService;

        /**
         * 创建订单->调用库存服务扣减库存->调用账户服务扣减账户余额->修改订单状态
         * 简单说:下订单->扣库存->减余额->改状态
         */
        @Override
        public void create(Order order) {
            //1 新建订单
            log.info("----->开始新建订单");
            baseMapper.create(order);
            log.info("----->新建订单完成");

            //2 扣减库存
            log.info("----->订单微服务开始调用库存,做扣减Count");
            storageService.decrease(order.getProductId(), order.getCount());
            log.info("----->库存扣减Count完成");

            //3 扣减账户
            log.info("----->订单微服务开始调用账户,做扣减Money");
            accountService.decrease(order.getUserId(), order.getMoney());
            log.info("----->账户扣减Money完成");

            //4 修改订单状态,从0到1,1代表已经完成
            log.info("----->修改订单状态开始");
            baseMapper.update(order.getUserId(),0);
            log.info("----->修改订单状态结束");

            log.info("----->下订单结束了,O(∩_∩)O哈哈~");

        }
}

更多内容,可查看源码

5)启动测试

# 先单机模式启动nacos
moon@moondeiMac  ~  %  cd /Users/moon/Downloads/nacos-2.2.1/distribution/target/nacos-server-2.2.1/nacos/bin
moon@moondeiMac bin % sh startup.sh -m standalone

# 再启动seata
moon@moondeiMac  ~  %  cd /Users/moon/Downloads/seata/bin
moon@moondeiMac bin % sh seata-server.sh 

分别访问:http://localhost:8848/nacos、http://localhost:7091/确认下nacos和seata启动无误。

然后依次启动seata-account-service、seata-storage-service、seata-order-service

微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

请求接口,模拟正常下单:http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100

运行结果:
微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos

3、常见问题

1)can not get cluster name in registry config ‘service.vgroupMapping.xx‘, please make sure registry问题解决;
核对项目中和配置文件是否一致:
微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot,《SpringCloud进阶实战》系列,分布式,seata,分布式事物,spring cloud,nacos
2)ERROR — [cos.client.naming.updater] c.a.nacos.client.security.SecurityProxy : [SecurityProxy] login http request failed url: http://127.0.0.1:8848/nacos/v1/auth/users/login, params: {username=nacos}, bodyMap: {password=nacos}, errorMsg: Server returned HTTP response code: 500 for URL: http://127.0.0.1:8848/nacos/v1/auth/users/login?username=nacos

大体上是版本问题,参考文章开头,更换组件版本。

注意以下几点:
Seata相关配置是否正确
Seata Server是否正常启动,并可以被访问
Seata Client是否正确配置,并与Seata Server保持连接文章来源地址https://www.toymoban.com/news/detail-697050.html

到了这里,关于微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决Nacos2.2.1启动报错

    很明显 ,报错原因是secret key参数 长度不够 打开nacos文件夹 - conf - application.properties 找到以下配置: nacos.core.auth.plugin.nacos.token.secret.key= 在后面添加随机参数作为nacos的加密密钥, 规则是加密密钥长度 =256 bits 或者 = 32 bytes 我添加了50位英文、数字成功运行 成功点亮

    2024年02月11日
    浏览(42)
  • windows、linux部署seata1.3.0

    前提:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud Alibaba Spring Cloud Spring Boot Nacos Seata 2.2.7.RELEASE Spring Cloud Hoxton.SR12 2.3.12.RELEASE 2.0.3 1.3.0 背景:seata配合nacos使用,并开启nacos,nacos使用默认的namespace,mysql5.7   seata1.3.0下载地址: https://github.com/seata/seata/releases/

    2024年02月12日
    浏览(38)
  • 分布式事务篇-2.1 阿里云轻量服务器--Docker--部署Seata

    本文介绍基于Seata 解决分布式事务,Seata 是一个服务所有首先需要对其进行部署。 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 拷贝完毕删

    2024年02月11日
    浏览(45)
  • docker-compose 部署 Seata整合nacos,Postgresql 为DB存储

    详情环境可参考 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 我这里 所有选择seata版本为 1.3.0 前提:已经安装好nacos和postgresql 创建好数据库 名称:seata 执行以下sql: 其他的sql可以参考: https://github.com/seata/seata/tree/develop/script/server/db 服务器层级结构: 2

    2024年02月10日
    浏览(50)
  • 微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用

    🏷️ 个人主页 :鼠鼠我捏,要死了捏的主页  🏷️ 系列专栏 :Golang全栈-专栏 🏷️ 个人学习笔记,若有缺误,欢迎评论区指正   前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 快速上手

    2024年02月19日
    浏览(37)
  • Nacos基础(2)——nacos的服务器和命名空间 & springBoot整合nacos & 多个nacos配置的情况

    1.nacos是服务发现、配置管理和服务管理平台; 2.nacos的命名空间–组–服务; 3.springboot整合nacos,版本的对应; 4.引入多个nacos配置的方法; 用户 服务管理,命名空间,集群管理 命名空间唯一id 自定义命名空间,公共命名空间 如何找到配置文件 新建配置 层级关系 bootstrap

    2024年02月03日
    浏览(44)
  • nacos2.1.1版本,作为注册中心,配置中心如何使用,nacos服务端启动,微服务搭建,nacos集群化部署

    关于nacos 相信大多数人一样,在接触微服务的时候知道有Netflix系列和alibaba系列 但是Netflix这一套如今由于部分组件不在开源,又有alibaba这一套的出现,市面上,alibaba系列微服务架构已经是最火热的了,而nacos则是alibaba系列组件充当服务注册发现和配置中心的角色 说白了,就是将每个

    2024年02月03日
    浏览(48)
  • springboot dubbo seata nacos集成 分布式事务seata实现

    官网:http://seata.io/zh-cn/docs/overview/what-is-seata.html Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 官网;https://cn.dubbo.apache.org/zh-cn/overview/what/

    2024年02月13日
    浏览(45)
  • 搭建微服务时 nacos2.2.2报错403 user not found!

    com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848]) tried: ErrCode:403, ErrMsg:htmlbodyh1Whitelabel Error Page/h1pThis application has no explicit mapping for /error, so you are seeing this as a fallback./pdiv id=\\\'created\\\'Sat Jun 10 15:35:54 GMT+08:00 2023/divdivThere was an unexpected e

    2024年02月16日
    浏览(36)
  • 【2.1】Java微服务: Nacos的使用

    目录 Nacos介绍 Nacos安装 下载和安装 修改端口 启动  服务注册与发现 导入Nacos管理依赖 导入服务依赖 配置Nacos的服务地址 启动服务,查看已注册的服务 服务分级存储模型 分级存储模型介绍 具体结构 配置实例集群 同集群优先的负载均衡策略 服务权重配置                

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包