同一个微服务模块多实例,TM会发生事物通知TC错乱的问题
- Ngôn ngữ chính
- Java
- Star
- 4.2k
- Fork
- 1.4k
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
- [ ] I have searched the [issues](https://github.com/codingapi/tx-lcn/issues) of this repository and believe that this is not a duplicate.
### 1. Bug Description
在多台机器上部署相同的服务模块moduleA(ip不同,端口也不同),代开tm的debug日志,发现在请求再moduleA_1的时候是正常的,然后内部服务调用切换到moduleA_2的时候,事物会发生超时,然后才删除redis的资源锁.如果再超时的这段时间内,有去获取排他锁会发生resource loack的异常情况.
在源码排查的情况中发现,在tm进行事务通知tx的时候

只会通知一个? 而且这边获取modId的时候进行获取的是模块名,即使我再tc那边重写的modId的生成规则,但是注册到tm的时候这个再客户端看来是modid的值变成了labelName
所以再通知tc事务的时候错乱了.下面是获取modid的方法

拿到是moduleA这个模块名,而不是具体的moduleA_1或者module_2具体的服务标识.
### 2. Environment:
- JDK version:1.8
- OS: ubuntu 16.0.4
- TX-LCN version: 5.0.2
- Others:
### 3. Exception Stacktrace
```
Paste your Exception Stacktrace here!
```
### 4. Tour Idea
所以,我这边想问下,当前5.0.2这个版本是不是对提供的modid的更改接口对接到tm的功能是否还没有完成?当前的labelName好像只是作为tm的后台展示所用,并没有其他的作用,那么当前是否不支持tc的多实例的应用?
我们这边对获取modid获取方式进行了更改,取的是labelName而不是appname

Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Tái hiện luồng đã được báo cáo với hai instance của moduleA bằng môi trường JDK 1.8, Ubuntu 16.04 và TX-LCN 5.0.2 được mô tả. Bắt đầu với các đường dẫn TM transaction-notification và modId registration được hiển thị trong issue, sau đó theo dõi khóa tài nguyên Redis trong quá trình chuyển đổi giữa moduleA_1 và moduleA_2. Hoàn tất nghĩa là các thông báo giữa nhiều instance nhắm đến đúng bên tham gia giao dịch mà không xảy ra lỗi timeout hoặc lỗi khóa tài nguyên.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java, redis
- Lĩnh vực
- backend, distributed-systems
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 25/100