dubbo集群容错策略

相关参数在

org.apache.dubbo.common.constants.ClusterRules

策略名称作用使用场景

failover

失败启动切换
当出现失败会重试其他服务器,会带来更长延迟,通过 retries=2 来设置重试次数(不含第一次)

通常用于读操作

failfast

快速失败
只发起一次调用,失败立即报错

通常用于非幂等写操作,比如新增记录

failsafe

失败安全
出现异常会直接忽略

通常用于写入审计日志等操作

failback

失败自动恢复

后台记录失败的请求,然后定时重发

通常用于消息通知相关的操作

forking

并行调用多个服务器,只要一个成功就返回

通常用于实时性要求较高的读操作,需要浪费更多资源,通过 forks=2 设置最大并行数

broadcast

广播调用所有提供者,逐个调用,任何一台报错则报错

通常用于通知所有提供者更新缓存或日志等本地资源信息

默认值 failover

对应策略的异常信息如下

@DubboReference(cluster = ClusterRules.FAIL_OVER)

org.apache.dubbo.rpc.RpcException: Invoke remote method timeout. method: getHello, provider: DefaultServiceInstance{serviceName='my-fault-tolerance-provider', host='192.168.106.105', port=20881, enabled=true, healthy=true, metadata={dubbo.endpoints=[{"port":20881,"protocol":"dubbo"}], dubbo.metadata-service.url-params={"connections":"1","version":"1.0.0","dubbo":"2.0.2","release":"3.0.7","side":"provider","port":"20881","protocol":"dubbo"}, dubbo.metadata.revision=d9eea05f8a4e8ec289758c67ec03017f, dubbo.metadata.storage-type=local}}, service{name='com.ghy.www.api.Service1',group='null',version='null',protocol='dubbo',params={side=provider, release=3.0.7, methods=getHello, logger=slf4j, deprecated=false, dubbo=2.0.2, interface=com.ghy.www.api.Service1, service-name-mapping=true, generic=false, application=my-fault-tolerance-provider, background=false, dynamic=true, anyhost=true},}, cause: org.apache.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2023-11-05 17:08:32.621, end time: 2023-11-05 17:08:33.648, client elapsed: 0 ms, server elapsed: 1027 ms, timeout: 1000 ms, request: Request [id=14, version=2.0.2, twoway=true, event=false, broken=false, data=null], channel: /192.168.106.105:55533 -> /192.168.106.105:20881

@DubboReference(cluster = ClusterRules.FAIL_FAST)

org.apache.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2023-11-05 17:05:44.807, end time: 2023-11-05 17:05:45.829, client elapsed: 1 ms, server elapsed: 1021 ms, timeout: 1000 ms, request: Request [id=4, version=2.0.2, twoway=true, event=false, broken=false, data=null], channel: /192.168.106.105:55533 -> /192.168.106.105:20881

@DubboReference(cluster = ClusterRules.FAIL_SAFE)

 org.apache.dubbo.rpc.RpcException: Invoke remote method timeout. method: getHello, provider: DefaultServiceInstance{serviceName='my-fault-tolerance-provider', host='192.168.106.105', port=20881, enabled=true, healthy=true, metadata={dubbo.endpoints=[{"port":20881,"protocol":"dubbo"}], dubbo.metadata-service.url-params={"connections":"1","version":"1.0.0","dubbo":"2.0.2","release":"3.0.7","side":"provider","port":"20881","protocol":"dubbo"}, dubbo.metadata.revision=d9eea05f8a4e8ec289758c67ec03017f, dubbo.metadata.storage-type=local}}, service{name='com.ghy.www.api.Service3',group='null',version='null',protocol='dubbo',params={side=provider, release=3.0.7, methods=getHello, logger=slf4j, deprecated=false, dubbo=2.0.2, interface=com.ghy.www.api.Service3, service-name-mapping=true, generic=false, application=my-fault-tolerance-provider, background=false, dynamic=true, anyhost=true},}, cause: org.apache.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2023-11-05 17:11:07.645, end time: 2023-11-05 17:11:08.669, client elapsed: 0 ms, server elapsed: 1024 ms, timeout: 1000 ms, request: Request [id=22, version=2.0.2, twoway=true, event=false, broken=false, data=null], channel: /192.168.106.105:55533 -> /192.168.106.105:20881

@DubboReference(cluster = ClusterRules.FAIL_BACK)

无异常

 @DubboReference(cluster = ClusterRules.FAIL_OVER, retries = 5)

org.apache.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2023-11-05 17:22:17.388, end time: 2023-11-05 17:22:18.422, client elapsed: 0 ms, server elapsed: 1034 ms, timeout: 1000 ms, request: Request [id=3058, version=2.0.2, twoway=true, event=false, broken=false, data=null], channel: /192.168.106.105:55535 -> /192.168.106.105:20883

@DubboReference(cluster = ClusterRules.FAIL_BACK, retries = 5)

 org.apache.dubbo.rpc.RpcException: Invoke remote method timeout. method: getHello, provider: DefaultServiceInstance{serviceName='my-fault-tolerance-provider', host='192.168.106.105', port=20883, enabled=true, healthy=true, metadata={dubbo.endpoints=[{"port":20883,"protocol":"dubbo"}], dubbo.metadata-service.url-params={"connections":"1","version":"1.0.0","dubbo":"2.0.2","release":"3.0.7","side":"provider","port":"20883","protocol":"dubbo"}, dubbo.metadata.revision=d9eea05f8a4e8ec289758c67ec03017f, dubbo.metadata.storage-type=local}}, service{name='com.ghy.www.api.Service9',group='null',version='null',protocol='dubbo',params={side=provider, release=3.0.7, methods=getHello, logger=slf4j, deprecated=false, dubbo=2.0.2, interface=com.ghy.www.api.Service9, service-name-mapping=true, generic=false, application=my-fault-tolerance-provider, background=false, dynamic=true, anyhost=true},}, cause: org.apache.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2023-11-05 17:27:53.514, end time: 2023-11-05 17:27:54.533, client elapsed: 1 ms, server elapsed: 1018 ms, timeout: 1000 ms, request: Request [id=3077, version=2.0.2, twoway=true, event=false, broken=false, data=null], channel: /192.168.106.105:55535 -> /192.168.106.105:20883

@DubboReference(cluster = ClusterRules.FORKING)

无异常

@DubboReference(cluster = ClusterRules.BROADCAST)

org.apache.dubbo.rpc.RpcException: Invoke remote method timeout. method: getHello, provider: DefaultServiceInstance{serviceName='my-fault-tolerance-provider', host='192.168.106.105', port=20881, enabled=true, healthy=true, metadata={dubbo.endpoints=[{"port":20881,"protocol":"dubbo"}], dubbo.metadata-service.url-params={"connections":"1","version":"1.0.0","dubbo":"2.0.2","release":"3.0.7","side":"provider","port":"20881","protocol":"dubbo"}, dubbo.metadata.revision=d9eea05f8a4e8ec289758c67ec03017f, dubbo.metadata.storage-type=local}}, service{name='com.ghy.www.api.Service6',group='null',version='null',protocol='dubbo',params={side=provider, release=3.0.7, methods=getHello, logger=slf4j, deprecated=false, dubbo=2.0.2, interface=com.ghy.www.api.Service6, service-name-mapping=true, generic=false, application=my-fault-tolerance-provider, background=false, dynamic=true, anyhost=true},}, cause: org.apache.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2023-11-05 17:37:01.405, end time: 2023-11-05 17:37:02.429, client elapsed: 0 ms, server elapsed: 1024 ms, timeout: 1000 ms, request: Request [id=3121, version=2.0.2, twoway=true, event=false, broken=false, data=null], channel: /192.168.106.105:55533 -> /192.168.106.105:20881 

FAIL_FAST 和 FAIL_OVER 的异常为 org.apache.dubbo.remoting.TimeoutException

FAIL_OVER、FAIL_SAFE、FAIL_BACK、BROADCAST 的异常为 org.apache.dubbo.rpc.RpcException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值