java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > spring cloud服务连接超时

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

作者:司马缸砸缸了

这篇文章主要介绍了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不允不允不允许

脏读:

不可重复读:

幻读:

幻读指的是事务不是串行发生时发生的一种现象,是事务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服务自己更新操作的事务不是一个,不存在等待。

总结

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

您可能感兴趣的文章:
阅读全文