Quick Start
How to use Seata
Import dependencies:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
The project provides related examples: Example
Make sure that
nacos-server
is already running locally on port8848
.Configure the database, modify the following configuration in the
application.yml
file under the resources directory of the three applicationsaccount-server
,order-service
, andstorage-service
to the actual configuration in the running environment Configuration:base:
config:
mdb:
hostname: 127.0.0.1 #your mysql server ip address
dbname: seata #your database name for test
port: 3306 #your mysql server listening port
username: root #your mysql server username
password: root #your mysql server passwordCreate a database table, which can be quickly operated according to
all.sql
underspring-cloud-alibaba-examples/seata-example
:- Create transaction log table according to the selected transaction mode. For example, the default is AT mode, and the undo_log table needs to be used, then enter at/db and select the corresponding database script to execute.
- Create the Status Record Table required for seata-server db mode, including
global_table
,branch_table
,lock_table
,distributed_lock
. - Create the database tables required in the
spring-cloud-alibaba-examples/seata-example
example.
Create the Nacos configuration required by
spring-cloud-alibaba-examples/seata-example
.DataId: seata.properties, Group: SEATA_ Group (Seata 1.5.1 default group)
Configuration content:
service.vgroupMapping.order-service-tx-group=default
service.vgroupMapping.account-service-tx-group=default
service.vgroupMapping.business-service-tx-group=default
service.vgroupMapping.storage-service-tx-group=defaultStart Seata Server, there are two ways: Spring Boot and download server:
- Run the seata-server under
spring-cloud-alibaba-examples/seata-example
to start the Seata server. - Start Seata Server according to seata-server.jar officially provided by the Seata community.
- Run the seata-server under
Start the sub-services
account-service
,order-service
,storage-service
under thespring-cloud-alibaba-examples/seata-example
folder locally, and finally start the global transaction control servicebusiness -service
.After starting the example, visit the following URL through the HTTP GET method to verify the scenarios of calling other services through RestTemplate and FeignClient in
business-service
:http://127.0.0.1:18081/seata/feign http://127.0.0.1:18081/seata/rest
Seata Dashboard
- Seata 1.5.1 supports Seata console local access console address:
http://127.0.0.1:7091
. - The ongoing transaction information and global lock information can be observed through the Seata console, and the relevant information is deleted when the transaction is completed.
How to verify the success of a distributed transaction?
Whether the Xid information is transmitted successfully
In the controllers of the three services account-server
, order-service
and storage-service
, the first logic to execute is to output the Xid information in the RootContext, and if you see it, the correct Xid information is output , that is, it changes every time, and the Xids of all services in the same call are consistent. It indicates that the transmission and restoration of Seata's Xid is normal.
Consistency of data in the database
In this example, we simulate a scenario where a user purchases goods. StorageService is responsible for deducting the inventory quantity, OrderService is responsible for saving the order, BusinessService is responsible for deducting the balance of the user account, and AccountService is responsible for updating the balance of the account and serves as the global transaction control entry. To demonstrate the example, we used Random in OrderService and AccountService. NextBoolean() randomly throws exceptions, simulating the scenario where exceptions occur randomly when calling services.
If distributed transactions are efficient, then the following equation should be true:
- User's original amount (1000) = user's existing amount + product unit price (2) order quantity product quantity per order (2)
- Initial Item Quantity (100) = Existing Item Quantity + Order Quantity * Item Quantity per Order (2)
Spring Cloud support points
- A service provider that provides services through Spring MVC can automatically restore the Seata context when it receives an HTTP request that contains Seata information in the header.
- Support for automatic passing of Seata context when service caller calls via RestTemplate.
- Support for automatically passing the Seata context when the service caller calls via FeignClient.
- Support the scenario of using SeataClient and Hystrix at the same time.
- Supports scenarios used by SeataClient and Sentinel.