분산 학습 프레임 워크 seata 뭔가의 두 번째 장 (구문 분석 소스 (서버 측))

그런 다음 서버를 이동하는 장소의 요청에 대해 살펴 커밋 모드 종료 코드 AT 것들 TM의 롤백이 시작되기 전에 본. 이것은 또한 실행 취소 로그 레코드 (데이터 조작 전에 원시 데이터) 동안 커밋되어 종료 또는 롤백 물건에 문제를 결정하는 데 사용되는
트랜잭션에 대한 최초의 개방형 인터페이스에 대해 이야기를 시작
그림 삽입 설명 여기
그를보기에 추상적 인 방법을 볼 수 있습니다 구현 클래스
그림 삽입 설명 여기

당신은 단지 하나의 구현 클래스는 DefaultCoordinator의입니다 볼 수있는
이 방법을 수행 봐 무엇을

그림 삽입 설명 여기
당신은이 방법은 객체의 코어 및 세트 XID를 호출 시작 볼 수 있습니다. 여기에 당신이 알 수 XID 여기서 생성되는
것을 않았다 시작 방법의 핵심을보기 위해
그림 삽입 설명 여기
먼저 밖으로 새 세션 SessionManager에이고를 다음 리스너를 추가 한 다음이 방법을 시작 호출
그림 삽입 설명 여기
여기 방법으로 청취자의 점 발견을 호출 onbegin 후 그것은이다
그림 삽입 설명 여기
그림 삽입 설명 여기
다음과 같은 방법 writesession

그림 삽입 설명 여기
우리는 당신이 서버가 데이터베이스를 사용하고자하는 파일에 쓸 수없는 경우 분산 디자인 seata를 사용하지만 독립을 제외하는 경우 해당주의 할 수 DB 세션 파일 또는 쓰기가 볼 수있다 (아무도는 독립형 사용하지합니다 )

그림 삽입 설명 여기
여기에서 무엇을 볼 수 eventbus의 게시물에 갈 수있는 방법
이 게시 이벤트가. (쓸모 봄 구독 모델 출시가 개인적으로, 나는 봄을 선호하는, 그래서 봄에 대한 어떤 프레임 워크) @Subscribe하여 자신의 가입자를 찾을 수

그림 삽입 설명 여기
그림 삽입 설명 여기
시작하기 때문에 해당 방법지도를 얻을 수있다. 즉 처음 시작 호출하는 것입니다

그림 삽입 설명 여기
点进去之后 是 一个map 维护的计数器
그림 삽입 설명 여기
看到使用的是 atomiclong。不过 阿里开发手册 建议 用longadder 至于两者区别 自己看去吧 简单说一下 在并发下 longadder 性能要比 前者好 实现原理 自己看去

最后是就 begin 的结尾了 返回 xid 到此 begin 就结束了 接下来 看看 commit

그림 삽입 설명 여기
假设 现在 我们的业务代码 已经 开启 然后 全部执行成功 接下来 就是 执行 commit 方法了
그림 삽입 설명 여기
그림 삽입 설명 여기
这里 首先 通过 xid 去寻找 session。这里肯定能找到(按照正常流程)
그림 삽입 설명 여기
这里就看到了 如果 你使用文件存储 不使用数据库 在分布式模式下 极可能出现session 为null的情况 我感觉 这个地方 少了校验。 应该 在请求来的时候 带上 存储类型 如果 是文件 还是分布式 那应该报错 (谨代表个人观点) 但是 你要是 改造一下 使用 流去读取 远程文件。也是可以的
그림 삽입 설명 여기
如果是 begin 则 将状态 改为 commiting 并返回true

그림 삽입 설명 여기
这里尝试 去 异步 commit 进去看看做了啥

그림 삽입 설명 여기
可以看到 如果是 tcc模式 返回false 就是 tcc模式 不能 异步 这里埋个疑惑 为啥 tcc不能呢
그림 삽입 설명 여기
上面就是 执行 commit 的方法了

그림 삽입 설명 여기
这里不说了 应该还是 计数

그림 삽입 설명 여기
这里判断是否是 saga模式 即长事物模式
그림 삽입 설명 여기
这里看到 如果是第一阶段 失败 则 继续循环 不继续执行
这里是继续执行的代码 开始 发送请求 到 rm端了
그림 삽입 설명 여기
그림 삽입 설명 여기
그림 삽입 설명 여기
是异步的发送请求出去
그림 삽입 설명 여기
下面的代码 是 判断 返回的内容是否成功

그림 삽입 설명 여기
다음은이 세션을 성공적으로 제거하는 것이다
그림 삽입 설명 여기
반환이 시도하지 않는 경우 여기를 보낸 후 내용입니다
우리가 치료 실패 후 보이는
그림 삽입 설명 여기
그림 삽입 설명 여기
변화하고 저장하는 데 실패 국가의 다음 세션에
우리가이 방법을보고
그림 삽입 설명 여기
이름을 넣어해야합니다 참조 재시 큐되는

그림 삽입 설명 여기
그림 삽입 설명 여기
되는 다시 시도 상태 아래로 리스너

마지막으로, 커밋 진정한 성공 다음 코드를 살펴

그림 삽입 설명 여기
그림 삽입 설명 여기
세션이 성공적으로 변경 DB에 다시 작성되었습니다

이 시점에서이 방법은 다음보기를 통해 커밋. 롤백 방법

롤백
그림 삽입 설명 여기
그림 삽입 설명 여기
그림 삽입 설명 여기

여기서 당신은 위의 방법은 가까운 통로가 첫 번째 통화를 볼 수 있습니다

그림 삽입 설명 여기

첫 번째 비공개 회의 있다는 것을 의미한다. 당신이 일을 롤백 원하기 때문에이 세션가 올 것이다에 그리고 다른 지점은 등록 할 수 없습니다
그림 삽입 설명 여기
또는 내부의 리스너를 넣고
그림 삽입 설명 여기
이 상태가 시간 표현을 롤백을 시작할 수 있다고 판단되는 경우 여기

그림 삽입 설명 여기
상기 롤백의 특정한 방법이다.
그림 삽입 설명 여기제출 방법 유사한 인터페이스는 말할 것이다 다른 시도하는 통화와 동일하지 않지만,이 방법은 다음의 통로 갖는다
그림 삽입 설명 여기
(세션 DB에 저장된 여기) DB 롤백의 것들이 데이터 불일치가 발생할 때 그 수단 그것은 (확률 이벤트가 발생하지 않습니다 것을 의미하지 않는다 작은 것으로 간주됩니다) 일어날
지금까지 서버 측 코드 분석 업체 정말 좋은 친밀한 업체를 통해 잘

출시 세 원저 · 원의 칭찬 0 · 조회수 84

추천

출처blog.csdn.net/haha12312wqe/article/details/104640369