Rumah  >  Artikel  >  Java  >  Apakah kaedah penggunaan dan penyepaduan java seata

Apakah kaedah penggunaan dan penyepaduan java seata

WBOY
WBOYke hadapan
2023-05-14 14:55:06704semak imbas

Pengedaran dan penyepaduan seata

1. Gunakan pelayan tc Seata

1) Muat turun

Mula-mula kita perlu memuat turun pakej pelayan seata

java seata部署和集成的方法是什么

2) Nyahzip

Nyahzip pakej zip ini dalam direktori bukan bahasa Cina Struktur direktori adalah seperti berikut:

java seata部署和集成的方法是什么

.
3 ) Ubah suai konfigurasi

Ubah suai fail registry.conf dalam direktori conf:

java seata部署和集成的方法是什么

Kandungan adalah seperti berikut:

registry {
  # tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等
  type = "nacos"

  nacos {
    # seata tc 服务注册到 nacos的服务名称,可以自定义
    application = "seata-tc-server"
    serverAddr = "127.0.0.1:8848"
    group = "DEFAULT_GROUP"
    namespace = ""
    cluster = "SH"
    username = "nacos"
    password = "nacos"
  }
}

config {
  # 读取tc服务端的配置文件的方式,这里是从nacos配置中心读取,这样如果tc是集群,可以共享配置
  type = "nacos"
  # 配置nacos地址等信息
  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }
}
4) Tambah konfigurasi dalam nacos

Perhatian khas bahawa untuk membolehkan kluster perkhidmatan tc berkongsi konfigurasi, kami memilih nacos sebagai pusat konfigurasi bersatu. Oleh itu, fail konfigurasi pelayan seataServer.properties fail perlu dikonfigurasikan dalam nacos.

Formatnya adalah seperti berikut:

java seata部署和集成的方法是什么

Kandungan konfigurasi adalah seperti berikut:

# 数据存储方式,db代表数据库
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 事务、日志等配置
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000

# 客户端与服务端传输方式
transport.serialization=seata
transport.compressor=none
# 关闭metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

Alamat pangkalan data, nama pengguna dan kata laluan yang diperlukan untuk diubah suai kepada maklumat pangkalan data anda sendiri.

5) Cipta jadual pangkalan data

Nota khas: Apabila perkhidmatan tc menguruskan transaksi yang diedarkan, ia perlu merekodkan data berkaitan transaksi ke dalam pangkalan data Anda perlu mencipta jadual ini terlebih dahulu.

Buat pangkalan data baharu bernama seata dan jalankan fail sql yang disediakan dalam bahan pra-kelas:

java seata部署和集成的方法是什么

Jadual ini terutamanya merekodkan transaksi global, transaksi cawangan, dan kunci global Maklumat:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- 分支事务表
-- ----------------------------
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table`  (
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `transaction_id` bigint(20) NULL DEFAULT NULL,
  `resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `branch_type` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `status` tinyint(4) NULL DEFAULT NULL,
  `client_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `gmt_create` datetime(6) NULL DEFAULT NULL,
  `gmt_modified` datetime(6) NULL DEFAULT NULL,
  PRIMARY KEY (`branch_id`) USING BTREE,
  INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- 全局事务表
-- ----------------------------
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table`  (
  `xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `transaction_id` bigint(20) NULL DEFAULT NULL,
  `status` tinyint(4) NOT NULL,
  `application_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `transaction_service_group` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `transaction_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `timeout` int(11) NULL DEFAULT NULL,
  `begin_time` bigint(20) NULL DEFAULT NULL,
  `application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `gmt_create` datetime NULL DEFAULT NULL,
  `gmt_modified` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`xid`) USING BTREE,
  INDEX `idx_gmt_modified_status`(`gmt_modified`, `status`) USING BTREE,
  INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;
6) Mulakan perkhidmatan TC

Masukkan direktori bin dan jalankan seata-server.bat di dalamnya:

java seata部署和集成的方法是什么

Selepas permulaan yang berjaya, pelayan seata sepatutnya telah didaftarkan di pusat pendaftaran nacos.

Buka penyemak imbas, lawati alamat nacos: http://localhost:8848, dan kemudian masukkan halaman senarai perkhidmatan Anda boleh melihat maklumat seata-tc-server:

java seata部署和集成的方法是什么

2. Seata integrasi perkhidmatan mikro 1) Memperkenalkan tanggungan

1) Memperkenalkan tanggungan
Pertama, kita perlu memperkenalkan kebergantungan seata ke dalam perkhidmatan mikro:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <exclusions>
        <!--版本较低,1.3.0,因此排除-->
        <exclusion>
            <artifactId>seata-spring-boot-starter</artifactId>
            <groupId>io.seata</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!--seata starter 采用1.4.2版本-->
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>${seata.version}</version>
</dependency>

2 )Ubah suai fail konfigurasi
Anda perlu mengubah suai fail application.yml dan menambah beberapa konfigurasi:

seata:
  registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    # 参考tc服务自己的registry.conf中的配置
    type: nacos
    nacos: # tc
      server-addr: 127.0.0.1:8848
      namespace: ""
      group: DEFAULT_GROUP
      application: seata-tc-server # tc服务在nacos中的服务名称
      cluster: SH
  tx-service-group: seata-demo # 事务组,根据这个获取tc服务的cluster名称
  service:
    vgroup-mapping: # 事务组与TC服务cluster的映射关系
      seata-demo: SH

3 Ketersediaan tinggi dan pemulihan bencana di luar tapak perkhidmatan TC 1) Simulasi TC kluster untuk pemulihan bencana luar tapak

1) Simulasikan kluster TC untuk pemulihan bencana jauh
Rancang untuk memulakan dua nod perkhidmatan TC tempat duduk:

节点名称 ip地址 端口号 集群名称
seata 127.0.0.1 8091 SH
seata2 127.0.0.1 8092 HZ
Kami telah pun memulakan perkhidmatan seata sebelum ini, pelabuhan adalah 8091, nama kluster ialah SH.

Sekarang, salin direktori seata dan namakannya seata2

Ubah suai kandungan seata2/conf/registry.conf seperti berikut:

registry {
  # tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等
  type = "nacos"

  nacos {
    # seata tc 服务注册到 nacos的服务名称,可以自定义
    application = "seata-tc-server"
    serverAddr = "127.0.0.1:8848"
    group = "DEFAULT_GROUP"
    namespace = ""
    cluster = "HZ"
    username = "nacos"
    password = "nacos"
  }
}

config {
  # 读取tc服务端的配置文件的方式,这里是从nacos配置中心读取,这样如果tc是集群,可以共享配置
  type = "nacos"
  # 配置nacos地址等信息
  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }
}

Masukkan direktori seata2/bin, dan kemudian Jalankan arahan:

seata-server.bat -p 8092

Buka konsol nacos dan lihat senarai perkhidmatan:

java seata部署和集成的方法是什么

Klik untuk butiran:

java seata部署和集成的方法是什么

2) Konfigurasikan pemetaan kumpulan transaksi kepada nacos
Seterusnya, kita perlu mengkonfigurasi hubungan pemetaan antara tx-service-group dan cluster ke pusat konfigurasi nacos.

Buat konfigurasi baharu:

java seata部署和集成的方法是什么

Kandungan konfigurasi adalah seperti berikut:

# 事务组映射关系
service.vgroupMapping.seata-demo=SH

service.enableDegrade=false
service.disableGlobalTransaction=false
# 与TC服务的通信配置
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableClientBatchSendRequest=false
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
# RM配置
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
# TM配置
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000

# undo日志配置
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
client.log.exceptionRate=100

3) Perkhidmatan mikro membaca konfigurasi nacos
Seterusnya, anda perlu mengubah suai fail application.yml setiap perkhidmatan mikro untuk membenarkan perkhidmatan mikro membaca fail client.properties dalam nacos:

seata:
  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP
      data-id: client.properties

Mulakan semula perkhidmatan mikro Sekarang perkhidmatan mikro disambungkan ke SH kluster tc , atau kluster HZ tc, semuanya ditentukan oleh klien.properties nacos.

lient.log.exceptionRate=100

## 3.微服务读取nacos配置

接下来,需要修改每一个微服务的application.yml文件,让微服务读取nacos中的client.properties文件:

```yaml
seata:
  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP
      data-id: client.properties

Mulakan semula perkhidmatan mikro Sekarang sama ada perkhidmatan mikro disambungkan kepada kluster SH tc atau kluster HZ tc ditentukan oleh klien nacos.properties Ia diputuskan.

Atas ialah kandungan terperinci Apakah kaedah penggunaan dan penyepaduan java seata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam