dubbo中FailfastClusterInvoker的作用是什么
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,今天就跟大家聊聊有关dubbo中FailfastClusterInvoker的作用是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Fail
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
黑客都是专攻网络安全的吗
数据库对象创建时间
山西小型软件开发erp
济南企业软件开发教程
聚宝v9数据库连接设置
江苏警官学院万古互联网科技园
软件开发工程师c 工资
天津初橙网络技术有限公司
重庆oa软件开发代码
一张数据库导入另一个表
学网络技术副业
服务器可以远程下载源码么
网络安全教育论文结束语
三大举措网络安全
sql怎么登录数据库
良精asp服务器
计算机网络技术张伟课后习题
网络安全法如何立法的
宁夏网络安全防疫
h620-g30服务器安装
每个ip都对应一个服务器吗
湖北应用软件开发商
内蒙古潮流软件开发服务应用
浪潮服务器的管理密码
广东商业软件开发预算
geolp ip数据库
服务器的管理网口
软件开发公司前期的账务
巡检管理系统怎么改数据库
北京服务器迁移云服务器