spring cloud服务连接超时问题及解决

 更新时间:2024年01月19日 15:18:24   作者:司马缸砸缸了  
这篇文章主要介绍了spring cloud服务连接超时问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一 . feign连接超时解决方法

在配置文件中添加配置(application.propeties)

设置超时时间5秒

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

或者设置不超时

hystrix.command.default.execution.timeout.enabled: false

二 . 超时案例

做项目时有一个接口,服务A调用服务B,服务B又调用服务C,服务C返回服务B,服务B有调用服务A。。。。

好晕,直接上图吧。

流程1

因为request更改了数据表,之后调用workflow,事务没有提交在等待方法执行完,workflow又反过来调用request更新数据表,因为是同一条数据,之前的没提交,所以就一直等待他提交,这样就死锁了,不管怎么设置超时时间都没有用的。

在这里恶补一下数据库的事务问题。

事务隔离级别

事务隔离级别由弱到强分别是:

  • READ_UNCOMMITTED(未提交读)
  • READ_COMMITTED(提交读)
  • REPEATABLE_READ(重复读)
  • SERIALIZABLE(串行读)
隔离界别脏读不可重复读幻读
READ_UNCOMMITTED允许允许允许
READ_COMMITTED不允允许允许
REPEATABLE_READ不允不允允许
SERIALIZABLE不允不允不允许

脏读:

  • 脏读指的是一个事务允许读取其他正在运行的事务还没有提交的数据,这种情况的发生主要因为没有加锁。

不可重复读:

  • 是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(即不能读到相同的数据内容)
  • 例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。
  • 要达到允许可重复读,必须让当前事务保持一个读共享锁。

幻读:

幻读指的是事务不是串行发生时发生的一种现象,是事务A读取了事务B已提交的新增数据。

  • 例如第一个事务对一个表的所有数据进行修改,同时第二个事务向表中插入一条新数据。
  • 那么操作第一个事务的用户就发现表中还有没有修改的数据行,就像发生了幻觉一样。
  • 解决幻读的方法是增加范围锁或者表锁。

MySQL的默认事务隔离级别是REPEATABLE_READ,ORACLE、SQL Server、DB2和PostgreSQL的默认事务隔离级别是READ_COMMITED

事务的特性(ACID特性)

原子性(Atomicity)

  • 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。

一致性(Consistency)

  • 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(Isolation)

  • 一个事务的执行不能被其他事务干扰。

持续性/永久性(Durability)

  • 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

流程2

流程2和流程1的区别是request的更新操作是在返回3之后,返回3是workflow调用request服务进行更新操作,此刻更完之后就会提交,之后request中又进行一次更新操作。

能成功的原因是,workflow调用request服务进行更新操作的事务和request服务自己更新操作的事务不是一个,不存在等待。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java Document生成和解析XML操作

    Java Document生成和解析XML操作

    这篇文章主要介绍了Java Document生成和解析XML操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java Random.nextInt()方法原理解析

    Java Random.nextInt()方法原理解析

    这篇文章主要介绍了Java Random.nextInt()方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • JDK 8和JDK 17的区别和新特性大全

    JDK 8和JDK 17的区别和新特性大全

    这篇文章主要给大家介绍了关于JDK 8和JDK 17的区别和新特性的相关资料,文中总结一些Jdk8到Jdk17的一些新特性,给大家选择jdk版本的时候有些参考性,需要的朋友可以参考下
    2023-06-06
  • 详解springcloud Feign的Hystrix支持

    详解springcloud Feign的Hystrix支持

    这篇文章主要介绍了详解springcloud Feign的Hystrix支持,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Spring Bean配置方式总结

    Spring Bean配置方式总结

    定义Spring Bcan的3种方式分别是:基于XML 的方式配置、基于注解扫播方式配置、基于元数据类的配置,本文就通过代码示例给大家详细讲讲这三种配置方式,需要的朋友可以参考下
    2023-12-12
  • Java工程mybatis实现多表查询过程详解

    Java工程mybatis实现多表查询过程详解

    这篇文章主要介绍了Java工程mybatis实现多表查询过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 深入了解Java语言中的并发性选项有何不同

    深入了解Java语言中的并发性选项有何不同

    这篇文章主要介绍了深入了解Java语言中的并发性选项有何不同,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • Java8实现对List<Integer>的求和

    Java8实现对List<Integer>的求和

    这篇文章主要介绍了Java8实现对List<Integer>的求和方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Spring学习之依赖注入的方法(三种)

    Spring学习之依赖注入的方法(三种)

    本篇文章主要介绍了Spring学习之依赖注入的方法(三种),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • springboot 多数据源配置不生效遇到的坑及解决

    springboot 多数据源配置不生效遇到的坑及解决

    这篇文章主要介绍了springboot 多数据源配置不生效遇到的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论