Ich habe vorher einen Tag damit verbracht. Obwohl Seata einfach zu bedienen und super einfach zu verwenden ist, ist die Installation und Konfiguration wirklich mühsam und ich bin auf verschiedene Fallstricke gestoßen. Kommen wir zum Punkt. o(╥﹏╥)o 1. VersionHinweis: Wenn die Versionen nicht übereinstimmen, treten verschiedene Fehler auf. Sie können die Versionen gemäß der offiziellen Website abgleichen. Sitz: 1.3.0 alibaba.cloud:2.2.3.RELEASE nacos:2.0.2 2. Docker-Installation und Aufbau des Seata-Servers2.1 Seata-Bild herunterladen Docker Pull Seataio/Seata-Server: 1.3.0 2.2 Erstellen Sie die Datei registry.conf im Linux-Verzeichnis. Mein Pfad lautet /data/seate/registry.conf. Alle weiteren Erstellungen erfolgen in diesem Verzeichnis. CD /Daten mkdir-Sitz vim-Registrierung.conf 2.3 Der Inhalt von registry.conf ist wie folgt Registrierung { Typ = "nacos" nacos Anwendung = "Seata-Server" Serveradresse = "127.0.0.1:8848" Gruppe = "SEATA_GROUP" Namespace = "" Cluster = "Standard" Benutzername = "" Passwort = "" } } Konfiguration { Typ = "nacos" nacos Serveradresse = "127.0.0.1:8848" Namespace = "" Gruppe = "SEATA_GROUP" Benutzername = "" Passwort = "" } } Beachten Sie, dass Registrierung und Konfiguration in derselben Gruppe sein müssen. Ich verwende nacos als Registrierungscenter. Beachten Sie, dass die Adresse von nacos geändert werden muss. ----->>>Hier möchte ich einen Satz hinzufügen. Sie müssen eine neue Datenbank seata und drei neue Tabellen erstellen. ---------------------------------- Das Skript, das verwendet wird, wenn der StoreMode „db“ ist --------------------------------- -- die Tabelle zum Speichern von GlobalSession-Daten TABELLE ERSTELLEN, WENN `global_table` NICHT VORHANDEN IST ( `xid` VARCHAR(128) NICHT NULL, `Transaktions-ID` BIGINT, `status` TINYINT NICHT NULL, `Anwendungs-ID` VARCHAR(32), `Transaktionsservicegruppe` VARCHAR(32), `Transaktionsname` VARCHAR(128), `Zeitüberschreitung` INT, `begin_time` BIGINT, `Anwendungsdaten` VARCHAR(2000), `gmt_create` DATETIME, `gmt_modified` DATETIME, PRIMÄRSCHLÜSSEL (`xid`), SCHLÜSSEL `idx_gmt_modified_status` (`gmt_modified`, `status`), SCHLÜSSEL `idx_transaction_id` (`Transaktions-ID`) ) ENGINE = InnoDB STANDARD-ZEICHENSATZ = utf8; -- die Tabelle zum Speichern von BranchSession-Daten TABELLE ERSTELLEN, WENN `branch_table` NICHT VORHANDEN IST ( `branch_id` BIGINT NICHT NULL, `xid` VARCHAR(128) NICHT NULL, `Transaktions-ID` BIGINT, `Ressourcengruppen-ID` VARCHAR(32), `Ressourcen-ID` VARCHAR(256), `Zweigtyp` VARCHAR(8), `status` TINYINT, `client_id` VARCHAR(64), `Anwendungsdaten` VARCHAR(2000), `gmt_create` DATETIME(6), `gmt_modified` DATETIME(6), PRIMÄRSCHLÜSSEL (`branch_id`), SCHLÜSSEL `idx_xid` (`xid`) ) ENGINE = InnoDB STANDARD-ZEICHENSATZ = utf8; - die Tabelle zur Speicherung der Sperrdaten TABELLE ERSTELLEN, WENN `lock_table` NICHT VORHANDEN IST ( `row_key` VARCHAR(128) NICHT NULL, `xid` VARCHAR(96), `Transaktions-ID` BIGINT, `branch_id` BIGINT NICHT NULL, `Ressourcen-ID` VARCHAR(256), `Tabellenname` VARCHAR(32), `pk` VARCHAR(36), `gmt_create` DATETIME, `gmt_modified` DATETIME, PRIMÄRSCHLÜSSEL (`row_key`), SCHLÜSSEL `idx_branch_id` (`branch_id`) ) ENGINE = InnoDB STANDARD-ZEICHENSATZ = utf8; Um eine verteilte Geschäftsdatenbank zu implementieren, müssen Sie jeder Datenbank eine Undo_log-Tabelle hinzufügen , andernfalls wird ein Fehler gemeldet. Tabelle „undo_log“ erstellen ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel', `branch_id` bigint(20) NICHT NULL KOMMENTAR 'Branch-Transaktions-ID', `xid` varchar(100) NOT NULL COMMENT 'globale Transaktions-ID', `Kontext` varchar(128) NOT NULL COMMENT 'undo_log Kontext, wie Serialisierung', `rollback_info` longblob NICHT NULL KOMMENTAR 'Rollback-Info', `log_status` int(11) NICHT NULL KOMMENTAR '0:normaler Status,1:Verteidigungsstatus', `log_created` datetime(6) NICHT NULL KOMMENTAR 'create datetime', `log_modified` datetime(6) NICHT NULL KOMMENTAR 'Datum und Uhrzeit ändern', Primärschlüssel (`id`), EINDEUTIGER SCHLÜSSEL `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='AT-Transaktionsmodus Undo-Tabelle'; 2.4 Erstellen Sie eine Push-Konfigurationsdatei vim config.txt, um die Konfiguration in der Datei an nacos zu pushen. vim config.txt service.vgroupMapping.btb_tx_group=Standard store.mode=db store.db.datasource=Druide store.db.dbType=mysql store.db.driverClassName=com.mysql.cj.jdbc.Driver store.db.url=jdbc:mysql://172.0.0.1:3306/seata?useUnicode=true store.db.Benutzer=root store.db.password=root store.db.minConn=5 store.db.maxConn=30 store.db.globalTable=globale_Tabelle store.db.branchTable=Zweigtabelle store.db.queryLimit=100 store.db.lockTable=Sperrtabelle store.db.maxWait=5000 Beachten Sie, dass btb_tx_group mit dem Client übereinstimmen muss. Achten Sie übrigens auf den Datenbanktreiber. Wenn es 8 oder höher ist, verwenden Sie meinen Treiber. Wenn es 5.7 ist, verwenden Sie com.mysql.jdbc.Driver 2.5 Erstellen Sie ein Push-Skript. Da sich das Ausführungsskript in der nächsten Ebene von config.txt befinden muss, fügen Sie ein Verzeichnis hinzu mkdir sh CD-Sch vim nacos-config.sh Der Inhalt lautet wie folgt: Am besten keine Änderungen vornehmen #!/usr/bin/env bash # Urheberrecht: 1999–2019 Seata.io-Gruppe. # # Lizenziert unter der Apache-Lizenz, Version 2.0 (die „Lizenz“); # Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. # Sie können eine Kopie der Lizenz erhalten unter # # http://www.apache.org/licenses/LICENSE-2.0 # # Sofern nicht gesetzlich vorgeschrieben oder schriftlich vereinbart, # Die Verteilung unter dieser Lizenz erfolgt auf einer "AS IS"-Basis, # OHNE GARANTIEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend. # Siehe die Lizenz für die spezifische Sprache, die Berechtigungen regelt und # Einschränkungen gemäß der Lizenz. während getopts ":h:p:g:t:u:w:" opt Tun Fall $opt-in H) Host=$OPTARG ;; P) port=$OPTARG ;; G) Gruppe=$OPTARG ;; T) Mieter=$OPTARG ;; u) Benutzername=$OPTARG ;; b) Passwort=$OPTARG ;; ?) echo " VERWENDUNGSOPTION: $0 [-h Host] [-p Port] [-g Gruppe] [-t Mandant] [-u Benutzername] [-w Passwort] " Ausfahrt 1 ;; esac Erledigt wenn [[ -z ${host} ]]; dann Host=lokaler Host fi wenn [[ -z ${port} ]]; dann Port = 8848 fi wenn [[ -z ${group} ]]; dann Gruppe="SEATA_GROUP" fi wenn [[ -z ${tenant} ]]; dann Mieter="" fi wenn [[ -z ${Benutzername} ]]; dann Benutzername="" fi wenn [[ -z ${password} ]]; dann Passwort="" fi nacosAddr=$Host:$Port Inhaltstyp = "Inhaltstyp:Anwendung/json;Zeichensatz=UTF-8" echo "setze nacosAddr=$nacosAddr" echo "Gruppe festlegen=$group" Fehleranzahl = 0 tempLog=$(mktemp -u) Funktion addConfig() { curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$1&group=$group&content=$2&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null wenn [[ -z $(cat "${tempLog}") ]]; dann echo " Bitte überprüfen Sie den Clusterstatus. " Ausfahrt 1 fi wenn [[ $(cat "${tempLog}") =~ "true" ]]; dann echo "$1=$2 erfolgreich gesetzt" anders echo "Setzen von $1=$2 fehlgeschlagen" (( Fehleranzahl++ )) fi } Anzahl=0 für Zeile in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); mache (( zählen++ )) Schlüssel=${line%%=*} Wert=${line#*=} addConfig "${Schlüssel}" "${Wert}" Erledigt echo "=================================================================================" echo " Initialisierungsparameter vollständig, Gesamtanzahl: $count , Anzahl der Fehler: $failCount " echo "=================================================================================" wenn [[ ${failCount} -eq 0 ]]; dann echo " Initialisierung der Nacos-Konfiguration abgeschlossen, bitte starten Sie den Seata-Server. " anders echo " Initialisierung der Nacos-Konfiguration fehlgeschlagen. " fi 2.6 Führen Sie das Push-Skript aus, gefolgt von der Nacos-IP-Adresse. Wenn der Port nicht 8848 ist, müssen Sie -p 8884 hinzufügen, um Ihren Port festzulegen. bash nacos-config.sh -h 127.0.0.1 2.7 Erstellen Sie einen Container. Beachten Sie, dass Sie die externe Netzwerk-IP-Adresse schreiben müssen, wenn SEATA_IP ein Alibaba Cloud-Server ist. docker run -d --restart always --name seata-server -p 8091:8091 -e SEATA_IP=172.0.0.1 -e SEATA_CONFIG_NAME=file:/data/seata/registry -v /data/seata:/data/seata seataio/seata-server:1.3.0 3. Client (d. h. Microservice, der Seata im Projekt verwendet)3.1 pom.xml führt Abhängigkeiten ein <!-- Verteilte Transaktionen von Seata --> <Abhängigkeit> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <Ausschlüsse> <Ausschluss> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> </Ausschluss> </Ausschlüsse> </Abhängigkeit> <Abhängigkeit> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <version>1.3.0</version> </Abhängigkeit> Beachten Sie, dass das ursprüngliche io.seata-Paket entfernt werden muss und die Paketversionen von Server und Client konsistent sein müssen. 3.2 Projektkonfigurationsdateien konfigurieren #sitzen seata.application-id=${spring.application.name} seata.tx-service-group=btb_tx_group seata.config.type=nacos seata.config.nacos.server-addr=172.0.0.1:8848 seata.config.nacos.group=SITZGRUPPE seata.registry.type=nacos seata.registry.nacos.application=seata-server seata.registry.nacos.server-addr=172.0.0.1:8848 seata.registry.nacos.group=SITZGRUPPE Hinweis: Die btb_tx_group hier sollte mit dem Schlüssel nach dem vgroupMapping auf dem Server übereinstimmen. Beispiel: service.vgroupMapping.btb_tx_group=default 3.3 Anmerkungen zur Verwendung hinzufügen @GlobalTransactional Erweiterung: Ich habe eine Datenbank verwendet und während der Ausführung wurde ein Fehler gemeldet, der besagte, dass mir ein Primärschlüssel fehlte. Daher habe ich der Undo_log-Tabelle eine inkrementelle Primärschlüssel-ID hinzugefügt. Das SQL zum Erstellen der Undo_log-Tabelle oben ist das, dem ich die ID hinzugefügt habe, und das offizielle ist ohne ID. Bitte beachten! ! ! ! Frage: In der Singular-Quelle liegt ein Fehler vor. Der Grund ist, dass ich eine Datenbank bin und die Proxy-Konfiguration wie folgt festlegen muss. Gemäß meiner tatsächlichen Situation bezieht es sich auf die Konfigurationsdatei, andernfalls wird ein Fehler gemeldet. #Einzelne Datenquelle seata.enable-auto-data-source-proxy=true #Mehrere Datenquellenseata.enable-auto-data-source-proxy=false Dies ist das Ende dieses Artikels über die Installation und Verwendung von Docker+nacos+seata1.3.0. Weitere Informationen zur Installation und Verwendung von Docker+nacos+seata finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: LinkedIn wird überarbeitet, um das Surfen auf der Website zu vereinfachen
>>: So verwenden Sie Xtrabackup zum Sichern und Wiederherstellen von MySQL
In diesem Artikel werde ich die relevanten Inhalt...
Dieser Artikel veranschaulicht anhand von Beispie...
1. Lösung für das Problem, dass die Seite leer is...
Inhaltsverzeichnis 1. Hintergrund 2. Bedienungssc...
Im vorherigen Artikel wurde erklärt, wie man das ...
Inhaltsverzeichnis for-Schleife While-Schleife do...
Inhaltsverzeichnis 1. Einleitung 2. MVCC (Multi-V...
brauchen: Den Geschäftsanforderungen entsprechend...
Bereitstellungsumgebung: Installationsversion Red...
Daten in MySQL-Datenbank einfügen. Bisher häufig ...
Dieser Artikel veranschaulicht anhand von Beispie...
prune Um diesen Befehl verwenden zu können, müsse...
Laden Sie das RPM-Installationspaket herunter Off...
1. Vue – Das erste Vue-CLI-Programm Die Entwicklu...
In diesem Artikel wird der spezifische JavaScript...