dubbo中FailfastClusterInvoker的作用是什么
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天就跟大家聊聊有关dubbo中FailfastClusterInvoker的作用是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Fail
千家信息网最后更新 2026年11月03日dubbo中FailfastClusterInvoker的作用是什么
今天就跟大家聊聊有关dubbo中FailfastClusterInvoker的作用是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
FailfastClusterInvoker
dubbo-2.7.3/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/FailfastClusterInvoker.java
public class FailfastClusterInvokerextends AbstractClusterInvoker { public FailfastClusterInvoker(Directory directory) { super(directory); } @Override public Result doInvoke(Invocation invocation, List > invokers, LoadBalance loadbalance) throws RpcException { checkInvokers(invokers, invocation); Invoker invoker = select(loadbalance, invocation, invokers, null); try { return invoker.invoke(invocation); } catch (Throwable e) { if (e instanceof RpcException && ((RpcException) e).isBiz()) { // biz exception. throw (RpcException) e; } throw new RpcException(e instanceof RpcException ? ((RpcException) e).getCode() : 0, "Failfast invoke providers " + invoker.getUrl() + " " + loadbalance.getClass().getSimpleName() + " select from all providers " + invokers + " for service " + getInterface().getName() + " method " + invocation.getMethodName() + " on consumer " + NetUtils.getLocalHost() + " use dubbo version " + Version.getVersion() + ", but no luck to perform the invocation. Last error is: " + e.getMessage(), e.getCause() != null ? e.getCause() : e); } }}
FailfastClusterInvoker的doInvoke在捕获到异常的时候包装为RpcException然后再抛出
FailfastClusterInvokerTest
dubbo-2.7.3/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/FailfastClusterInvokerTest.java
public class FailfastClusterInvokerTest { List> invokers = new ArrayList>(); URL url = URL.valueOf("test://test:11/test"); Invoker invoker1 = mock(Invoker.class); RpcInvocation invocation = new RpcInvocation(); Directory dic; Result result = new AppResponse(); /** * @throws java.lang.Exception */ @BeforeEach public void setUp() throws Exception { dic = mock(Directory.class); given(dic.getUrl()).willReturn(url); given(dic.list(invocation)).willReturn(invokers); given(dic.getInterface()).willReturn(FailfastClusterInvokerTest.class); invocation.setMethodName("method1"); invokers.add(invoker1); } private void resetInvoker1ToException() { given(invoker1.invoke(invocation)).willThrow(new RuntimeException()); given(invoker1.getUrl()).willReturn(url); given(invoker1.getInterface()).willReturn(FailfastClusterInvokerTest.class); } private void resetInvoker1ToNoException() { given(invoker1.invoke(invocation)).willReturn(result); given(invoker1.getUrl()).willReturn(url); given(invoker1.getInterface()).willReturn(FailfastClusterInvokerTest.class); } @Test public void testInvokeException() { Assertions.assertThrows(RpcException.class, () -> { resetInvoker1ToException(); FailfastClusterInvoker invoker = new FailfastClusterInvoker(dic); invoker.invoke(invocation); Assertions.assertSame(invoker1, RpcContext.getContext().getInvoker()); }); } @Test() public void testInvokeNoException() { resetInvoker1ToNoException(); FailfastClusterInvoker invoker = new FailfastClusterInvoker(dic); Result ret = invoker.invoke(invocation); Assertions.assertSame(result, ret); } @Test() public void testNoInvoke() { dic = mock(Directory.class); given(dic.getUrl()).willReturn(url); given(dic.list(invocation)).willReturn(null); given(dic.getInterface()).willReturn(FailfastClusterInvokerTest.class); invocation.setMethodName("method1"); invokers.add(invoker1); resetInvoker1ToNoException(); FailfastClusterInvoker invoker = new FailfastClusterInvoker(dic); try { invoker.invoke(invocation); fail(); } catch (RpcException expected) { assertFalse(expected.getCause() instanceof RpcException); } }} FailfastClusterInvokerTest执行了testInvokeException、testInvokeNoException、testNoInvoke三种测试
小结
FailfastClusterInvoker的doInvoke在捕获到异常的时候包装为RpcException然后再抛出
看完上述内容,你们对dubbo中FailfastClusterInvoker的作用是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
内容
作用
时候
包装
小结
更多
知识
篇文章
行业
资讯
资讯频道
频道
进一
支持
有关
测试
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
哈尔滨大商圈互联网科技有限公司
苏州找大状互联网科技有限公司
中国互联网科技工作委员会毛军
互联网最新的科技
新华互联网科技学院
互联网科技战争
卓越科技(互联网 )
迪茉互联网科技
华中科技大学互联网
奇士达互联网科技
新浪科技互联网
长亮科技 互联网金融
成都狮子座互联网科技
成都仁贤领冠互联网科技有限公司
浙江互联网科技研学营
互联网科技革命什么开始
如何创新互联网科技
滨湖区互联网智能科技产品有哪些
中国新注册互联网科技
北京军民互联网科技公司
互联网和科技技术
A股互联网金融科技公司
新华互联网科技学院
港股互联网科技股
互联网科技与金融科技
互联网教育科技公司vipkid
互联网金融中的现代科技
互联网科技职业技能培训学校
马化腾互联网科技教学
利用互联网等科技手段