一、问题描述:

dubbo消费者端向 dubbo 服务提供者端发起RPC远程调用,服务提供者端任务正常执行,但是却执行了3次。后来发现,虽然 provider 端程序正常执行,但是执行超时了,此时,consumer 端在超时前没有收到响应,就按照 dubbo 默认的重试机制一共调用了3次。
这种超时导致的重试,如果是读操作,影响倒是不大,但如果是写操作,会导致多次insert,应该避免这种问题。
由于我的项目中, provider 端是执行shell脚本,向服务器写文件,同时将执行日志与shell执行结果文件存到mysql,导致了多条写数据。

二、consumer 端报错信息:

六月 15, 2020 11:04:25 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [dispatcherServlet] in context with path [/tmp-web] threw exception [Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method. Tried 3 times of the providers [172.x.x.x:7070] (1/1) from the registry 172.x.x.x:2181 on the consumer x.x.x.19 using the dubbo version 2.6.2. Last error is: Invoke remote method timeout.
provider: dubbo://172.x.x.x:7070/service.JmeterExecuteService?anyhost=true&application=tmp-web&dubbo=2.6.2&side=consumer&timeout=3000&version=1.0.0, cause: Waiting server-side response timeout.client elapsed: 0 ms, server elapsed: 3002 ms, timeout: 3000 ms,

provider端日志的错误现象:虽然执行结果为true,但是由于超时,同一次调用重试了3次。

三、解决步骤:

1.取消重试。

关闭服务的重连,需要设置retries = -1 。
参考连接:【dubbo重试次数】

2.延长超时时间

以上操作发现,虽然dubbo的重试取消了,consumer 端只请求了一次,但是客户端日志却还是在报错,超时的异常依然存在,需要将超时时间设置长一点。

consumer 消费者端日志:

provider 服务端日志:

问题解决了。注意:超时时间与重试的配置 是在provider端的,consumer端没有配置超时与重试参数。

四、dubbo 官网建议的配置优先级

以超时为例,这是从高到低的优先级(重试,负载平衡,活动对象也应用相同的规则):
方法级别,接口级别,默认/全局级别。
在同一级别上,消费者的优先级高于提供者
提供者方的配置通过注册表以URL的形式传递给消费者方。

建议提供者为每个服务设置一个超时,因为提供者确切地知道一种方法需要执行多长时间。如果使用者同时引用多个服务,则无需关心每个服务的超时设置。

dubbo的 timeout 与 retries相关推荐

  1. Dubbo 接口 timeout 与 retries 用法

    dubbo 版本 :2.7.10,SpringBoot:2.4.5 使用 Springboot 作为脚手架,加入 dubbo 依赖,服务 B 调用 服务 A,查看 timeout 与 retries ...

  2. Dubbo关于timeout等相关配置的优先级

    关于配置中timeout,有的服务有时是provider的身份,有时是consumer的身份,配置的timeout属性到底哪个生效,哪个优先,折腾了我一阵子,于是自己测试了半天,总结一下 原则: 1. ...

  3. dubbo的provider和consumer的demo

    2019独角兽企业重金招聘Python工程师标准>>> ** provider项目 ** 1.需要调用的接口 package service.api; public interfac ...

  4. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  5. spring boot配置dubbo(XML)

    上一篇写的是spring boot在自己的properties配置文件中简单配置dubbo的步骤,那种配置有很多的功能(比如超时时间.是否检查)等等,配置起来也挺麻烦的,而我们也习惯传统的那种XML形 ...

  6. JAVA分布式篇3——Dubbo

    JAVA分布式篇3--Dubbo 1.架构演变 1.1.单应用架构 当网站流量很小时,只需要一个应用,将所有的功能部署到一起(所有业务都放在一个tomcat 里),从而减少部署节点和成本 用于简化 增 ...

  7. 架构设计(3)---基于Nginx和Zookeeper实现Dubbo的分布式服务

    基于Nginx和Zookeeper实现Dubbo的分布式服务 一.前言 公司的项目基于阿里的Dubbo 微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业 ...

  8. 集群和分布式的区别,软件架构的演化过程,Apache Dubbo详解

    集群和分布式的区别   集群是通过提高单位时间内执行的任务数来提升效率,分布式是以缩短单个任务的执行时间来提升效率的. 举个例子: &emsp: 例如: &emsp:  一个数据库里边 ...

  9. Dubbo之——Dubbo服务集群

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/72354649 集群的目的:实现高可用,容错功能,集群的服务器不要放在一台物理机,要 ...

最新文章

  1. 定义分销渠道(distribution channel)
  2. 7.1.2 定义改进的Sales_date类
  3. 利用多线程实现linux下C语言的聊天室程序:
  4. python画蜡烛致敬烈士_「」matplotlib 股票-用python绘制蜡烛线型k线图是用代码还是绘图工具-TOP金融网...
  5. 如何使用Dockerfile构建镜像
  6. 针对C++最主要的优势就是没有指针
  7. python做bi系统_2020年很受Python工程师喜爱的5款数据可视化bi软件
  8. 如何使用Jmeter对WebSocket进行压力测试
  9. 线程相关的sleep()、yield()、wait()、join()方法介绍
  10. 系统学习NLP(十八)--文本分类概述
  11. ASP.NET中的ExecuteNonQuery()方法的用法
  12. 网络舆情监测在教育行业的必要性
  13. 计算机桌面全部内容自定义,电脑win10如何恢复自定义桌面图标排列的方法
  14. Ubuntu 配置磁盘挂载到指定目录
  15. 写一个最简单的mysql编程_要学简单的数据库编程!
  16. 如何在微信公众号正文中添加附件?
  17. Python变量和基本数据类型
  18. 【jquery-跨域】
  19. 什么是linux云计算?用来做什么?
  20. 各版本的Hadoop安装包下载

热门文章

  1. STM32cubeMX配置FreeRTOS软件定时器
  2. 【毕业设计】双闭环直流调速系统的建模与仿真【源码+论文】
  3. 海信家电:积极开拓,到处碰壁
  4. sga的组成 简述oracle_oracle SGA详解
  5. 【Prism系列】Prism中的命令
  6. 服务器经典稳定版iocp,个人IOCP服务器例子解说
  7. 2020最全的Lucene7 入门教程
  8. snownlp 中文文本情感分析、相似度计算、分词等
  9. 三菱、汇川plc用485通讯板和变频器通讯,实现正转、反转、运行过程改变频率实现调速
  10. 腾讯云域名如何设置正确的dns