1. 问题描述
在写探花交友项目时使用了Dubbo进行远程调用,在Debug的时候,涉及到向MongoDB中插入数据,调试后发现数据中有3条重复的数据。为了验证错误,关闭所有断点,直接运行,发现插入的数据就只有一条。因此遍想到这应该和Dubbo的超时重试机制有关。
2. Dubbo的超时重试机制
消费者在调用提供者的时候发生了阻塞,等待的情况,这个时候消费者会一直等待下去。如果此时请求比较多,那么在消费者这里积攒的请求就越来越多,导致请求大量堆积,引发雪崩现象。Dubbo使用超时机制来解决这个问题,在配置文件中设置Timeout属性,默认值为1秒
此外,Dubbo还提供了重试机制,当一次请求超时时,会重新发送请求。默认情况下,一旦超时,Dubbo会重新发送两次请求到提供者。也可以通过配置文件取消重试机制
consumer模块中添加配置信息
dubbo:
registry:
address: nacos://127.0.0.1:8848
consumer:
timeout: 3000
retries: 0
3. 解决方法
在tanhua-app-server模块中的application.yml中添加取消超时重试的配置
dubbo: #dubbo配置
registry:
address: spring-cloud://localhost
consumer:
check: false
timeout: 300000
retries: 0
cloud:
subscribed-services: tanhua-dubbo-db,tanhua-dubbo-mongo
再次测试,发现问题已经解决