Transactional 事务问题引发的fegin调用超时time out

这两天发现一个问题,记录一下。

由于业务问题,不想在service层做事务控制。
在controller层调用多个service,由同一个事务控制。

– 具体案例:
在一个restful接口下调用两个方法, 一个接入service有修改数据库的操作, 第二个方法接入的service钟进行fegin远程调用,将fegin调用进行try,cath并重新抛出自定义异常,试了很多种事务都无效。事务没办法控制,fegin远程调用永远会存在第一次调用time out超时。且事务无法回滚。

后面退而求其次,

采用的方法就是同一个方法在service曾进行事务的控制。奇迹的是,fegin也不会出现那种第一次访问超时的现象。说明一下:fegin调用的两个服务都是我这边本人控制,且调用不存在任何问题,多次正常调用,只是在本次业务场景中产生了这种在controller曾进行多个service事务控制时fegin调用,首次永远超时,再次访问正常的现象。

这种现象的原因似乎是,controller层调用service时,动态代理对象不是同一个对象,由此在controller层进行事务控制时,产生的一种bug,具体没有深入研究,有知道的大佬,可以给我分析一下,谢谢

–后续:这个bug原因后来修改事务后,还是没有解决,最后解决的方案,是在本服务调用的时候设置ribbon的超时时间。

#ribbon (read + connect)*2 < hystrix timeoutInMilliseconds
ribbon.ReadTimeout=70000
ribbon.ConnectTimeout=10000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
加上@Transactional后,feign远程调用超时问题可能与事务的提交时间有关。一旦使用@Transactional注解,Spring会将整个方法包装在一个事务中,这意味着如果其中的某个feign远程调用耗时较长,整个事务也会被延长。因此,如果feign远程调用存在超时问题,可能会导致事务无法在规定时间内完成提交。 为了解决这个问题,有几种方法可以尝试: 1. 调整事务超时时间:可以通过在@Transactional注解中设置timeout属性来调整事务超时时间,以适应feign远程调用的耗时。 2. 异步处理:可以将feign远程调用改为异步处理,这样可以避免阻塞主线程。可以使用Spring提供的@Async注解将远程调用方法标记为异步执行。 3. 使用独立的事务管理:可以考虑将feign远程调用的方法放在独立的事务管理中,而不将其包含在主事务中。可以使用编程式事务手动控制事务范围,而不使用声明式事务@Transactional注解。 4. 调整feign客户端的超时时间:可以通过配置feign客户端的连接超时时间和读取超时时间,来提高feign远程调用的稳定性。 综上所述,加上@Transactionalfeign远程调用超时问题可能是由于事务的提交时间过长导致的。可以通过调整事务超时时间、使用异步处理、使用独立的事务管理或者调整feign客户端的超时时间来解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Transactional 事务问题引发fegin调用超时time out](https://blog.csdn.net/weixin_46063176/article/details/117999954)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [大意了,使用@Transactional竟然出现了长事务,导致生产事故!](https://blog.csdn.net/qq_34162294/article/details/121571689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值