Dubbo retries 超时重试机制的问题原因分析及解决方案

 更新时间:2022年04月14日 17:19:00   作者:m0_54861649  
这篇文章主要介绍了Dubbo retries 超时重试机制的问题,解决方案是通过修改dubbo服务提供方,将timeout超时设为20000ms或者设置retries=“0”,禁用超时重试机制,感兴趣的朋友跟随小编一起看看吧

异常日志

[com.alibaba.dubbo.rpc.filter.TimeoutFilter] -  [DUBBO] invoke time out. method: sendMessagearguments: [{****内容****}] , url is dubbo://*.*.*.*:20882/cn.demo.api.IDemoProviderApi?anyhost=true&application=demo&dubbo=2.8.4&generic=false&interface=cn.demo.api.IDemoProviderApi&methods=sendMessage,resetSendCount&pid=13008&revision=0.0.1-SNAPSHOT&side=provider&timeout=6000×tamp=1521449123489&version=1.0, invoke elapsed 10863 ms., dubbo version: 2.8.4, current host: 127.0.0.1 

异常原因

dubbo服务提供方,通过注解方式暴露的,参数设置如下:

@Service(version = "1.0", timeout = 6000)

消费方调用dubbo服务,请求超时,dubbo服务有超时重试机制,所以对于提交的业务,会有3次调用.

解决方案

修改dubbo服务提供方.将timeout超时设为20000ms.或者设置retries=“0”.禁用超时重试机制.

xml方式(消费方):

<!-- 需要消费的api --> 
 <dubbo:consumer check="false" id="dubboConsumerConfig" retries="0"/>

注解方式(提供方):

@Service(version = "1.0", timeout = 20000)

Dubbo超时重试机制

1、请求服务超时,但是最终程序执行了3次,对于提交订单的业务,只能是新增一个订单,这样是不可以的.

2、dubbo:provider 可以设置超时时间 timout,以及如果超时允许被重连的次数 retries.

3、dubbo:reference 可以设置超时时间,以及如果超时 timout,允许重连服务的次数 retries;如果服务方有设置retries,消费方可以不设置该参数.

4、dubbo:reference retries 的默认值和consumer一样,而consumer默认为2次

dubbo:consumer

retries

default.retries

int

可选

2

#--------以下为转载--------

1.超时设置

DUBBO消费端设置超时时间需要根据业务实际情况来设定,
如果设置的时间太短,一些复杂业务需要很长时间完成,导致在设定的超时时间内无法完成正常的业务处理。
这样消费端达到超时时间,那么dubbo会进行重试机制,不合理的重试在一些特殊的业务场景下可能会引发很多问题,需要合理设置接口超时时间。
比如发送邮件,可能就会发出多份重复邮件,执行注册请求时,就会插入多条重复的注册数据。

(1)合理配置超时和重连的思路

1.对于核心的服务中心,去除dubbo超时重试机制,并重新评估设置超时时间。
2.业务处理代码必须放在服务端,客户端只做参数验证和服务调用,不涉及业务流程处理

(2)Dubbo超时和重连配置示例

<!-- 服务调用超时设置为5秒,超时不重试--> 
<dubbo:service interface="com.provider.service.DemoService" ref="demoService"  retries="0" timeout="5000"/>

2.重连机制

dubbo在调用服务不成功时,默认会重试2次。
Dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以 dubbo的重试机器也能一定程度的保证服务的质量。
但是如果不合理的配置重试次数,当失败时会进行重试多次,这样在某个时间点出现性能问题,调用方再连续重复调用,
系统请求变为正常值的retries倍,系统压力会大增,容易引起服务雪崩,需要根据业务情况规划好如何进行异常处理,何时进行重试。

参考:https://www.cnblogs.com/binyue/p/5380322.html

补充:下面介绍下dubbo RPC 不能直接传递数组类型。

今天遇到一个大坑,提供的一个RPC接口批量查Redis数据,由于数据类型不定,采用<String,Object>的map作为返回类型,查到的结果集其中有一个是数组类型,代码没报问题,但一直RPC异常,各种狗屎的尝试排查,终于定位到问题。

最简单的解决方案是将所有的value都转化成String类型。

目测是dubbo序列化不允许直接传递数组类型,后面再研究。

到此这篇关于Dubbo retries 超时重试机制的问题的文章就介绍到这了,更多相关Dubbo retries 超时重试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • AspectJ的基本用法

    AspectJ的基本用法

    本文主要介绍了AspectJ的基本用法。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • ClassLoader类加载源码解析

    ClassLoader类加载源码解析

    这篇文章主要为大家详细解析了ClassLoader类加载源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • springboot切换使用undertow容器的方式

    springboot切换使用undertow容器的方式

    最近稍微有点空闲,回头再来优化下基础框架,也是一种重新学习。今天主要写写跟大家分享下springboot使用undertow,废话不多说
    2022-07-07
  • SpringBoot各种注解详解

    SpringBoot各种注解详解

    SpringBoot的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用SpringBoot注解方式或者Spring XML配置方式。SpringBoot注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率
    2022-12-12
  • SpringBoot项目配置postgresql数据库完整步骤(配置多数据源)

    SpringBoot项目配置postgresql数据库完整步骤(配置多数据源)

    PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),下面这篇文章主要给大家介绍了关于SpringBoot项目配置postgresql数据库(配置多数据源)的相关资料,需要的朋友可以参考下
    2023-05-05
  • windows环境下java开发工具maven的安装教程图解

    windows环境下java开发工具maven的安装教程图解

    Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。这篇文章主要介绍了windows环境下java开发工具maven的安装,非常不错对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot整合之SpringBoot整合MongoDB的详细步骤

    SpringBoot整合之SpringBoot整合MongoDB的详细步骤

    这篇文章主要介绍了SpringBoot整合之SpringBoot整合MongoDB的详细步骤,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • Java多线程实现模拟12306火车站售票系统

    Java多线程实现模拟12306火车站售票系统

    12360火车票售票系统基本上大家都用过,那你知道是怎么实现的吗,今天我们就模拟12306火车站售票系统来实现,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Java实现一个简单的长轮询的示例代码

    Java实现一个简单的长轮询的示例代码

    长轮询是与服务器保持即时通信的最简单的方式,它不使用任何特定的协议,例如 WebSocket ,所以也不依赖于浏览器版本等外部条件的兼容性。本文将用Java实现一个简单的长轮询,需要的可以参考一下
    2022-08-08
  • 聊聊MultipartFile与File的一些事儿

    聊聊MultipartFile与File的一些事儿

    这篇文章主要介绍了MultipartFile与File的一些事儿,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论