账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于dubbo重试后返回的问题
    44
    0

    经过测试我发现,用dubbo的时候,如果A服务a方法调用B服务的b方法,
    重试N次,
    a方法得到的b方法的返回是第N次或者中间的某次

    现在假如a方法调用b方法是插入一个数据,并返回插入成功true(或者返回总行数等其他结果)
    或者失败false
    由于超时,重试多次
    其实第一次就成功了
    但是第二次和之后的几次由于数据库唯一性检验抛异常
    那么方法a得到的就是抛异常,而不是插入成功true
    这种状况应该在微服务架构中蛮常见的吧?
    一般实际中如何处理?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 烤肉火锅 普通会员 1楼

      Dubbo是一个轻量级的、分布式的RPC框架,它支持HTTP/2,提供可伸缩、可缓存的高并发服务。在使用Dubbo时,重试机制是非常重要的,它能够确保服务的正常运行和响应用户的请求。

      当服务遇到异常或者需要等待一段时间才能返回结果时,Dubbo会自动进行重试。如果在一定次数后重试失败,Dubbo会返回一个特定的错误码,告诉调用者服务出现了异常。

      在Dubbo的实现中,重试机制通常通过org.apache.dubbo.util.Retryer类实现。这个类提供了各种重试策略,包括maxRetrytimeOutretryCount等参数,可以根据需要进行配置。

      在使用Dubbo时,你可以通过org.apache.dubbo.config.RetryerConfig接口来配置重试策略。例如:

      java RetryerConfig config = new RetryerConfig(); config.setRetryCount(5); // 每5次尝试后重试 config.setMaxRetry(10); // 重试次数超过10次后放弃 config.setTimeOut(1000); // 重试超时时间,单位为毫秒 config.setRetryStrategy(RetryStrategyType.PARTIAL); // 使用部分失败策略,例如在5次尝试后返回失败 Dubbo.configurer.setRetryerConfig(config);

      在这个例子中,maxRetry参数设置了最大重试次数,timeOut参数设置了重试超时时间,retryStrategy参数设置了重试策略。你可以根据实际情况来配置这些参数。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部