dubbo顺序调用服务,其中一个出错。怎么保证整个方法正常执行。

发布于 2021-12-05 14:22:16 字数 1199 浏览 738 评论 13

dubbo 在顺序调用 远程服务的时候  必须要循环调用5个服务。 其中一个服务挂掉了。那么就会抛出异常 ,导致整个方法不可用。 但是想要  忽略其中挂掉的服务,不要求每一个都成功但是大体上要成功,即不因为其中一个服务的挂掉而导致整个方法出错。这种怎么解决?

伪代码

public void main(){

    Service1 service1 = context.getBean("Service1");
    //假如现在       service2 这个服务机器 挂掉了。 
    //这里抛出异常。 不想用捕获异常的方式来解决这个问题。
    //因为这个服务个数可能要很多个。service 7 8 9 10...
    Service2 service2 = context.getBean("Service2");
    Service3 service3 = context.getBean("Service3");
    Service4 service4 = context.getBean("Service4");
    Service5 service5 = context.getBean("Service5");
    
    String rtnmsg1 = service1.doservice();
    String rtnmsg2 = service2.doservice();
    String rtnmsg3 = service3.doservice();
    String rtnmsg4 = service4.doservice();
    String rtnmsg5 = service5.doservice();
    
    String rtnmsg = rtnmsg1+rtnmsg2+rtnmsg3+rtnmsg4+rtnmsg5;
}

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

顾忌 2021-12-09 15:21:18

您好,这个不是spring cloud中的熔断么。 可以作为单独的包引用到dubbo中么?

小情绪 2021-12-09 15:21:13

回复
@StopTWorld : 客气了

皇甫轩 2021-12-09 15:21:13

回复
@工匠驿站 : 好的。谢谢您,我去研究一下。

心舞飞扬 2021-12-09 15:21:13

回复
@StopTWorld : http://www.roncoo.com/article/detail/126834 可以参考这个

左岸枫 2021-12-09 15:21:10
噩梦成真你也成魔 2021-12-09 15:21:09

fallback  别告诉我没有

爱的那么颓废 2021-12-09 15:21:09

蟹蟹回复。 这个没接触过,我再去查查,您这边有相关的示例么?

凡尘雨 2021-12-09 15:21:08

蟹蟹回复。第一种, 按照官方文档 mock配置没成功,mock的意思是不是 就是当5个服务中的某的挂掉了 ,就调用本地对应的实现mock类。 这块您有成功的配置么。 第二种,我这边测试是我循环调用5个远程方法,其中一个出错 就抛异常了呀。。。

南冥有猫 2021-12-09 15:21:02

回复
@StopTWorld : mock本地方法调用需要设置mock="true",并且需要在同包目录下创建实现同一接口,以接口名+Mock为结尾的默认实现类;或者是设置mock="return null"代表异常时返回空对象。请参考文档:http://dubbo.apache.org/zh-cn/docs/user/demos/local-mock.html

如日中天 2021-12-09 15:19:39

调用链五个?还是五个提供者轮询?

第一种,调用链五个,你可以做mock

第二种,五个提供者轮询,挂了不受影响啊,zk会通知dubbo删除宕机的信息。

等风来 2021-12-09 15:10:56

蟹蟹回复。 这个配置配置了 可以保证启动没有问题,不检查服务端是否正常,, 但是调用的时候 就出问题了。 就是我上面描述的问题。

醉酒的小男人 2021-12-09 15:07:36

<dubbo:reference id="XXX"
        interface="XXX" retries="XXX"
        timeout="XXX" check="false" />

设置此服务启动不检查:check="false"

看透却不说透 2021-12-09 12:47:46

蟹蟹回复。 单独 try catch是可以,但是我这边服务很多。比如要调用30个接口。 那样的话 感觉有点。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文