慕桂英3389331
2023-04-26 13:59:37
@EnableLoadTimeWeaving我在與 AspectJ + @Transactional+的組合中遇到問題@HystrixCommand。所以,我已經(jīng)像這樣配置了加載時(shí)編織:@EnableLoadTimeWeaving(aspectjWeaving = ENABLED)@EnableCaching(mode = AdviceMode.ASPECTJ)@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)加上儀器配置。我有一個(gè) bean A,@Transactional在其中用和方法注釋,用 注釋@HystrixCommand。然后我有一個(gè) bean B,也用 注釋@Transactional,但是有propagation = Propagation.MANDATORY,這意味著它需要現(xiàn)有事務(wù),否則失敗。這個(gè) bean 中還有一個(gè)方法,用@HystrixCommand.最終,當(dāng)我從 bean A 的方法調(diào)用 bean B 的方法時(shí),我得到:No existing transaction found for transaction marked with propagation 'mandatory'。我找了幾個(gè)小時(shí)的問題:一切似乎都配置正確,所以我?guī)缀醴艞壛恕H缓笪抑皇窃噲D@HystrixCommand從方法中刪除。瞧:事務(wù)傳播開始正常工作,異常消失了。所以我想知道:為什么會(huì)@HystrixCommand中斷事務(wù)傳播?它與我使用加載時(shí)編織的事實(shí)有某種關(guān)系嗎?還是預(yù)期的行為?有人可以闡明一下嗎?
1 回答

寶慕林4294392
TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
HystrixCommands
您所說的問題可能與在隔離線程中執(zhí)行的事實(shí)有關(guān):
默認(rèn)和推薦的設(shè)置是使用線程隔離 (THREAD) 運(yùn)行 HystrixCommands,使用信號(hào)量隔離 (SEMAPHORE) 運(yùn)行 HystrixObservableCommands。
在線程中執(zhí)行的命令具有額外的保護(hù)層,以防止超出網(wǎng)絡(luò)超時(shí)所能提供的延遲。
通常,只有當(dāng)調(diào)用量如此之大(每個(gè)實(shí)例每秒數(shù)百次)以至于單獨(dú)線程的開銷太高時(shí),您才應(yīng)該為 HystrixCommands 使用信號(hào)量隔離;這通常只適用于非網(wǎng)絡(luò)呼叫。
添加回答
舉報(bào)
0/150
提交
取消