SpringCloud+feign服務呼叫,參與方不回滾。例如:發起方A(注解使用的是@LcnTransaction,@Transactional)
)通過feign呼叫參與方B(注解@LcnTransaction(propagation = DTXPropagation.SUPPORTS)
@Transactional),B拋例外,A插入資料(不回滾)。
使用過的解決辦法:
1,feign取消falback,不進行熔斷,測驗無效;
2,feign不取消falback,進行熔斷,在添加方法的實作加入DTXUserControls.rollbackGroup(TracingContext.tracing().groupId()),測驗無效;
生產環境:
騰訊云
使用Docker打txlcn的鏡像,TM主機IP設定為:0.0.0.0:8070(無法設定為127.0.0.1:8070,否則TC系結不到TM主機)
服務A配置TC主機IP為:TM主機的負載均衡IP:8070,開啟了LCN的重寫負載策略
服務B配置TC主機IP為:TM主機的負載均衡IP:8070,開啟了LCN的重寫負載策略
部署txlcn鏡像日志顯示:
An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.io.IOException: 連接被對方重設
不知是否影響?
TxManager系統后臺:
已注冊的TC=2(也就是A和B已系結TM)
一切看起來很正常,正確使用了參與方與發起方的注解,但是,B服務拋出例外,曾經試過取消熔斷把例外拋給A服務與加入DTXUserControls.rollbackGroup(TracingContext.tracing().groupId())代碼,A服務依舊提交了事務?
請解答,萬分感謝。
注:在本地專案事務正常回滾,線上不行,不知是否是線上環境原因?
uj5u.com熱心網友回復:
feign取消falback,不進行熔斷,例外拋給呼叫方,事務是可以回滾得,我試過,但不熔斷如果請求多了都卡那,服務器受不了,我也瞅著怎么處理,求解uj5u.com熱心網友回復:
注解@LcnTransaction(propagation = DTXPropagation.SUPPORTS) 改成 @LcnTransaction(propagation = DTXPropagation.NEVER)轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/12747.html
標籤:Java相關
上一篇:想問問如何優化查詢效率
