spring cloud with hystrix and seata, the service provider or RM is not wrapped in branch transaction

ugmeyewa  于 2022-11-19  发布在  Spring
关注(0)|答案(1)|浏览(185)
  • I have searched the issues of this repository and believe that this is not a duplicate.

Ⅰ. Issue Description

this issue is related to this one, The spring cloud project uses both seata, sleuth, hystrix, and SeataFeignClientAutoConfiguration conflicts.
i'm test seata with spring cloud and seata, when i set feign.hystrix.enabled=true, application can't startup, then i set spring.main.allow-bean-definition-overriding=true, the startup was ok, but when i tested the service, i found the service provider is not wrappeed in branch transaction.

Ⅱ. Describe what happened

as we can see from seata server log, there was only one branch transation in global transaction, the service provider was not registered a branch transation.

2019-10-30 17:44:28.800 INFO [ServerHandlerThread_20_500]io.seata.server.coordinator.DefaultCore.begin:145 -Successfully begin global transaction xid = 10.10.10.246:8091:2026133972
2019-10-30 17:44:30.339 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:198 -SeataMergeMessage xid=10.10.10.246:8091:2026133972,branchType=AT,resourceId=jdbc:mysql://localhost:3306/business,lockKey=business:3
,clientIp:10.10.10.158,vgroup:my_test_tx_group
2019-10-30 17:44:30.347 INFO [ServerHandlerThread_21_500]io.seata.common.loader.EnhancedServiceLoader.loadFile:236 -load Locker[file] extension by class[io.seata.server.lock.memory.MemoryLocker]
2019-10-30 17:44:30.349 INFO [ServerHandlerThread_21_500]io.seata.server.coordinator.DefaultCore.lambda$branchRegister$0:94 -Successfully register branch xid = 10.10.10.246:8091:2026133972, branchId = 2026133973
2019-10-30 17:44:30.450 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:198 -SeataMergeMessage xid=10.10.10.246:8091:2026133972,branchId=2026133973,resourceId=null,status=PhaseOne_Done,applicationData=null
,clientIp:10.10.10.158,vgroup:my_test_tx_group
2019-10-30 17:44:30.450 INFO [ServerHandlerThread_22_500]io.seata.server.coordinator.DefaultCore.branchReport:118 -Successfully branch report xid = 10.10.10.246:8091:2026133972, branchId = 2026133973
2019-10-30 17:44:30.457 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:198 -SeataMergeMessage xid=10.10.10.246:8091:2026133972,extraData=null
,clientIp:10.10.10.158,vgroup:my_test_tx_group
2019-10-30 17:44:31.115 INFO [AsyncCommitting_1]io.seata.server.coordinator.DefaultCore.doGlobalCommit:303 -Global[10.10.10.246:8091:2026133972] committing is successfully done.

Ⅲ. Describe what you expected to happen

Ⅳ. How to reproduce it (as minimally and precisely as possible)

  1. xxx
  2. xxx
  3. xxx

Ⅴ. Anything else we need to know?

i seted breakpoint both at SeataFeignClientAutoConfiguration and TraceFeignClientAutoConfiguration, it seems like SeataFeignClientAutoConfiguration was not executed.

Ⅵ. Environment:

  • JDK version :1.8
  • OS :ubantu
  • Others:spring cloud version Hoxton.M3, seata 0.9
wswtfjt7

wswtfjt71#

Hi @xiaoluchow ,我试了下,是可以兼容的,

2019-11-05 16:25:16.337 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:199 -SeataMergeMessage timeout=60000,transactionName=purchase(java.lang.String, java.lang.String, int)
,clientIp:192.168.66.110,vgroup:my_test_tx_group

2019-11-05 16:25:16.349 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:199 -SeataMergeMessage xid=192.168.66.110:8091:2026670145,branchType=AT,resourceId=jdbc:mysql://192.168.200.43:3306/
test,lockKey=storage_tbl:13
,clientIp:192.168.66.110,vgroup:my_test_tx_group

2019-11-05 16:25:16.355 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:199 -SeataMergeMessage xid=192.168.66.110:8091:2026670145,branchId=2026670146,resourceId=null,status=PhaseOne_Done,a
pplicationData=null
,clientIp:192.168.66.110,vgroup:my_test_tx_group

2019-11-05 16:25:16.364 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:199 -SeataMergeMessage xid=192.168.66.110:8091:2026670145,branchType=AT,resourceId=jdbc:mysql://192.168.200.43:3306/
test,lockKey=order_tbl:13
,clientIp:192.168.66.110,vgroup:my_test_tx_group

2019-11-05 16:25:16.370 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:199 -SeataMergeMessage xid=192.168.66.110:8091:2026670145,branchId=2026670147,resourceId=null,status=PhaseOne_Done,a
pplicationData=null
,clientIp:192.168.66.110,vgroup:my_test_tx_group

2019-11-05 16:25:16.376 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:199 -SeataMergeMessage xid=192.168.66.110:8091:2026670145,branchType=AT,resourceId=jdbc:mysql://192.168.200.43:3306/
test,lockKey=account_tbl:13
,clientIp:192.168.66.110,vgroup:my_test_tx_group

2019-11-05 16:25:16.382 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:199 -SeataMergeMessage xid=192.168.66.110:8091:2026670145,branchId=2026670148,resourceId=null,status=PhaseOne_Done,a
pplicationData=null
,clientIp:192.168.66.110,vgroup:my_test_tx_group

2019-11-05 16:25:16.388 INFO [batchLoggerPrint_1]io.seata.core.rpc.DefaultServerMessageListenerImpl.run:199 -SeataMergeMessage xid=192.168.66.110:8091:2026670145,extraData=null
,clientIp:192.168.66.110,vgroup:my_test_tx_group

2019-11-05 16:25:16.397 INFO [ServerHandlerThread_86_500]io.seata.server.coordinator.DefaultCore.doGlobalRollback:309 -Successfully rollbacked branch BR:2026670148/2026670145
2019-11-05 16:25:16.404 INFO [ServerHandlerThread_86_500]io.seata.server.coordinator.DefaultCore.doGlobalRollback:309 -Successfully rollbacked branch BR:2026670147/2026670145
2019-11-05 16:25:16.412 INFO [ServerHandlerThread_86_500]io.seata.server.coordinator.DefaultCore.doGlobalRollback:309 -Successfully rollbacked branch BR:2026670146/2026670145

三个分支都回滚了.

2019-11-05 17:21:16.102  INFO [order-service,c1de7b1a9a8b0111,89ffd4abc11d0153,false] 5836 --- [nio-8082-exec-2] i.s.common.loader.EnhancedServiceLoader  : load ContextCore[null] extension by class[io.seata.core.context.ThreadLocalContextCore]
2019-11-05 17:21:16.103 DEBUG [order-service,c1de7b1a9a8b0111,89ffd4abc11d0153,false] 5836 --- [nio-8082-exec-2] io.seata.core.context.RootContext        : bind 192.168.66.110:8091:2026670547
2019-11-05 17:21:16.297  INFO [order-service,c1de7b1a9a8b0111,89ffd4abc11d0153,false] 5836 --- [nio-8082-exec-2] i.s.common.loader.EnhancedServiceLoader  : load LoadBalance[null] extension by class[io.seata.discovery.loadbalance.RandomLoadBalance]
2019-11-05 17:21:16.297 DEBUG [order-service,c1de7b1a9a8b0111,89ffd4abc11d0153,false] 5836 --- [nio-8082-exec-2] i.s.core.rpc.netty.AbstractRpcRemoting   : offer message: xid=192.168.66.110:8091:2026670547,branchType=AT,resourceId=jdbc:mysql://192.168.200.43:3306/test,lockKey=order_tbl:25

sleuth 日志也打出来了

关于 SeataFeignClientAutoConfiguration 没有执行 可以看
SleuthHystrixFeignBuilder

private static Client client(BeanFactory beanFactory) {
        try {
          //getBean 最终调用到 SeataFeignObjectWrapper.warp 中设置了seataClient的代理
            Client client = (Client)beanFactory.getBean(Client.class);
            return new LazyClient(beanFactory, client);
        } catch (BeansException var2) {
            return TracingFeignClient.create((HttpTracing)beanFactory.getBean(HttpTracing.class), new Default((SSLSocketFactory)null, (HostnameVerifier)null));
        }
    }

example

相关问题