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

StopTWorld 发布于 2017/12/15 11:06
阅读 1K+
收藏 0

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;
}

 

加载中
0
FutureElement
FutureElement

单独加try catch呗

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

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

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

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

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

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

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

nonnetta
nonnetta
回复 @StopTWorld : mock本地方法调用需要设置mock="true",并且需要在同包目录下创建实现同一接口,以接口名+Mock为结尾的默认实现类;或者是设置mock="return null"代表异常时返回空对象。请参考文档:http://dubbo.apache.org/zh-cn/docs/user/demos/local-mock.html
StopTWorld
StopTWorld
蟹蟹回复。第一种, 按照官方文档 mock配置没成功,mock的意思是不是 就是当5个服务中的某的挂掉了 ,就调用本地对应的实现mock类。 这块您有成功的配置么。 第二种,我这边测试是我循环调用5个远程方法,其中一个出错 就抛异常了呀。。。
0
Storm-Cai
Storm-Cai

fallback  别告诉我没有

StopTWorld
StopTWorld
蟹蟹回复。 这个没接触过,我再去查查,您这边有相关的示例么?
0
工匠驿站
工匠驿站
工匠驿站
回复 @StopTWorld : 客气了
StopTWorld
StopTWorld
回复 @工匠驿站 : 好的。谢谢您,我去研究一下。
工匠驿站
工匠驿站
回复 @StopTWorld : http://www.roncoo.com/article/detail/126834 可以参考这个
StopTWorld
StopTWorld
您好,这个不是spring cloud中的熔断么。 可以作为单独的包引用到dubbo中么?
返回顶部
顶部