linux 部署seata1.5.2

1. 版本需求:

依赖版本:

        <spring.boot.version>2.6.11</spring.boot.version>
        <spring-cloud.version>2021.0.4</spring-cloud.version>
        <com-alibaba-cloud.version>2021.0.4.0</com-alibaba-cloud.version>
        <java.version>1.8</java.version>

服务版本:

seata:1.5.2, nacos:2.2.0

2. linux上seata部署

 

  2.1 官网地址:https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html

  2.2 下载安装包并/usr/local/chdz下并解压

   2.3. 进入目录/usr/local/chdz/seata/conf下修改application.yml配置

  application.yml

复制代码
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:
  user:
    username: seata
    password: seata

seata:
  config:
    type: nacos
    nacos:
      server-addr: 192.168.xx.xxx:8848
      namespace: fb109d39-80dd-44fc-9a83-fe56483b5b7d
      group: SEATA_GROUP
      username: nacos
      password: nacos
      data-id: seataServer    
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 192.168.xx.xxx:8848
      group: SEATA_GROUP
      namespace: fb109d39-80dd-44fc-9a83-fe56483b5b7d
      cluster: default
      username: nacos
      password: nacos
  store:
    mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://192.168.xx.xxx:3306/seata?rewriteBatchedStatements=true
      user: root
      password: 123456
      min-conn: 5
      max-conn: 100
      global-table: global_table
      branch-table: branch_table
      lock-table: lock_table
      distributed-lock-table: distributed_lock
      query-limit: 100
      max-wait: 5000
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
复制代码

  注:seata.config.data-id为 seataServer

  2.4 创建数据库seata并添加表

   2.4.1 脚本位置

   2.4.2 脚本内容

  

  2.5 在naocs中添加配置

  2.5.1 原始文件内容

  

  2.5.2 修改之后的内容

  

  注:

 

  2.6 启动seata ./seata-server.sh -h 127.0.0.1 -m db

  2.6.1 nacos中服务列表

   2.6.2 点击seata-server详情 IP为172.17.0.1

   2.6.3 使用ip重新启动  ./seata-server.sh -h 192.168.xx.xxx -m db

   2.6.4 再次查看nacos中的信息

 注:使用 ./seata-server.sh -h 127.0.0.1 -m db不行的原因是因为 客户端(RM)与 服务(TC)无法通信

2023-04-24 10:19:31.359 ERROR 55056 --- [eoutChecker_2_1] i.s.c.r.netty.NettyClientChannelManager  : 0101 can not connect to 172.17.0.1:8091 cause:can not register RM,err:can not connect to services-server.

io.seata.common.exception.FrameworkException: can not register RM,err:can not connect to services-server.
    at io.seata.core.rpc.netty.NettyClientChannelManager.doConnect(NettyClientChannelManager.java:250) ~[seata-all-1.5.2.jar:1.5.2]
    at io.seata.core.rpc.netty.NettyClientChannelManager.acquireChannel(NettyClientChannelManager.java:112) ~[seata-all-1.5.2.jar:1.5.2]
    at io.seata.core.rpc.netty.NettyClientChannelManager.reconnect(NettyClientChannelManager.java:196) ~[seata-all-1.5.2.jar:1.5.2]
    at io.seata.core.rpc.netty.AbstractNettyRemotingClient$1.run(AbstractNettyRemotingClient.java:115) [seata-all-1.5.2.jar:1.5.2]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_161]

 

 3.客户端搭建

  3.1 添加表 undo_log

  地址:https://github.com/seata/seata/blob/master/script/client/at/db/mysql.sql

复制代码
CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',
    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4 COMMENT ='AT transaction mode undo table';
复制代码

  3.2 添加pom.xml

复制代码
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <version>1.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
复制代码

  3.2 添加bootstrap.yml 

复制代码
seata:
  registry:
    # 配置seata的注册中心, 告诉seata client 怎么去访问seata server(TC)
    type: nacos
    nacos:
      server-addr: 192.168.xx.xxx:8848  # seata server 所在的nacos服务地址
      namespace: fb109d39-80dd-44fc-9a83-fe56483b5b7d
      application: seata-server    # seata server 的服务名seata-server ,如果没有修改可以不配
      username: nacos
      password: nacos
      group: SEATA_GROUP          # seata server 所在的组,默认就是SEATA_GROUP,没有改也可以不配
  config:
    type: nacos
    nacos:
      server-addr: 192.168.xx.xxx:8848
      namespace: fb109d39-80dd-44fc-9a83-fe56483b5b7d
      username: nacos
      password: nacos
      group: SEATA_GROUP
      dataId: seataServer
  tx-service-group: default_tx_group
复制代码

  注:default_tx_group 要与 2.5.2 步骤中 service.vgroupMapping.default_tx_group=default 一致

    官网地址:https://seata.io/zh-cn/docs/user/txgroup/transaction-group-and-ha.html

  3.3 添加注释 @GlobalTransactional

复制代码
    @GlobalTransactional
    @Override
    public boolean editUserAndFactoryName(String name) {
        String xid = RootContext.getXID();
        log.info("xid:"+xid);
        UserPO userPO = new UserPO().setUserId(1).setUserName("用户" + name);
        boolean b = updateById(userPO);
        boolean b1 = remoteFactoryService.editFactory(1, "工厂" + name);
        return b & b1;
    }
复制代码

 

  源码分析:

https://blog.csdn.net/LiuRenyou/article/details/119798993

GlobalTransactionalInterceptor.invoke()为开头。
TransactionalTemplate.execute()为结尾。


 

posted @   真某人  阅读(600)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示