在之前微服务架构之Dubbo服务降级(1)讲解了mock的服务降级机制,其实stub可以说范围更广阔,更全面的服务降级。
官方是这样介绍的:Mock是Stub(本地存根)的一个子集,便于服务提供方在客户端执行容错逻辑,因经常需要在出现RpcException(比如网络失败,超时等)时进行容错,而在出现业务异常(比如登录用户名密码错误)时不需要容错,如果用Stub, 需要捕获并依赖RpcException类,而用Mock就可以不依赖RpcException,因为它的约定就是只有出现RpcException时才执行。Mock通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过Mock数据返回授权失败。
如何使用Stub
Stub 存根,可以在dubbo 提供者端实现,也可在调用消费方实现; 如果消费方实现存根,则服务方 存根 将不起作用。
|
|
我们在com.alibaba.dubbo.demo路径下定义DemoServiceStub类,实现DemoService接口。
|
|
源码解析
我们在这篇文章介绍了dubbo的服务引用,ReferenceConfig的init()在执行ref = createProxy(map)之前有一步骤是checkStubAndMock,如果没有com.alibaba.dubbo.demo.DemoServiceStub实现会报错。在StubProxyFactoryWrapper后面我们看到处理stub的逻辑
|
|