注意:3)代理数据源
现在配置信息都是托管到nacos中的,所以可以直接将配置存储到nacos中
hailtaxi-order
hailtaxi-driver
TCC实现原理:5 Seata注册中心复制代码
- 有一个 TCC 拦截器,它会封装 Confirm 和 Cancel 方法作为资源(用于后面 TC 来 commit 或 rollback 操作)
- 封装完,它会本地缓存到 RM (缓存的是方法的描述信息),可以简单认为是放到一个 Map 里面
- 当 TC 想调用的时候,就可以从 Map 里找到这个方法,用反射调用就可以了
- 另外,RM 不光是注册分支事务(分支事务是注册到 TC 里的 GlobalSession 中的)
- 它还会把刚才封装的资源里的重要属性(事务ID、归属的事务组等)以资源的形式注册到 TC 中的 RpcContext
- 这样,TC 就知道当前全局事务都有哪些分支事务了(这都是分支事务初始化阶段做的事情)
- 举个例子:RpcContext里面有资源 123,但是 GlobalSession 里只有分支事务 12
- 于是 TC 就知道分支事务 3 的资源已经注册进来了,但是分支事务 3 还没注册进来
- 这时若 TM 告诉 TC 提交或回滚,那 GlobalSession 就会通过 RpcContext 找到 1 和 2 的分支事务的位置(比如该调用哪个方法)
- 当 RM 收到提交或回滚后,就会通过自己的本地缓存找到对应方法,最后通过反射或其他机制去调用真正的 Confirm 或 Cancel
完整配置如下:测试:复制代码
- seata:
- enabled: true
- application-id: ${spring.application.name}
- tx-service-group: my_seata_group
- enable-auto-data-source-proxy: true
- use-jdk-proxy: false
- excludes-for-auto-proxying: firstClassNameForExclude,secondClassNameForExclude
- client:
- rm:
- async-commit-buffer-limit: 1000
- report-retry-count: 5
- table-meta-check-enable: false
- report-success-enable: false
- saga-branch-register-enable: false
- lock:
- retry-interval: 10
- retry-times: 30
- retry-policy-branch-rollback-on-conflict: true
- tm:
- degrade-check: false
- degrade-check-period: 2000
- degrade-check-allow-times: 10
- commit-retry-count: 5
- rollback-retry-count: 5
- undo:
- data-validation: true
- log-serialization: jackson
- log-table: undo_log
- only-care-update-columns: true
- log:
- exceptionRate: 100
- service:
- vgroup-mapping:
- my_seata_group: default
- #grouplist:
- #default: 192.168.200.129:8091
- enable-degrade: false
- disable-global-transaction: false
- transport:
- shutdown:
- wait: 3
- thread-factory:
- boss-thread-prefix: NettyBoss
- worker-thread-prefix: NettyServerNIOWorker
- server-executor-thread-prefix: NettyServerBizHandler
- share-boss-worker: false
- client-selector-thread-prefix: NettyClientSelector
- client-selector-thread-size: 1
- client-worker-thread-prefix: NettyClientWorkerThread
- worker-thread-size: default
- boss-thread-size: 1
- type: TCP
- server: NIO
- heartbeat: true
- serialization: seata
- compressor: none
- enable-client-batch-send-request: true
- registry:
- type: nacos
- nacos:
- application: seata-server
- server-addr: 192.168.200.129:8848
- group : "SEATA_GROUP"
- namespace: 1ebba5f6-49da-40cc-950b-f75c8f7d07b3
- username: "nacos"
- password: "nacos"
如果基于DB来存储seata-server的事务日志数据,则需要创建数据库seata,表信息如下:修改完后重启
https://github.com/seata/seata/blob/1.3.0/script/server/db/mysql.sql
本文由传智教育博学谷 - 狂野架构师教研团队发布
如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力
转载请注明出处!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |