转:
Dubbo 服务治理-mock实例
Dubbo的mock自己折腾的实例,配置信息有点简陋,有点粗鄙,如果是处女座的程序员,就建议看看就行哈。
其实Dubbo的mock的实例原理简单而言就是调用真实的接口实现类不通,就会调用你的mock类(mock类和真实实现类都Implements 同一个接口,自己mock的名字要是:接口类名+mock)。
我这个人直接来例子,不太喜欢讲太多文绉绉的字。处女座的程序员就是这样的哈,比较直接。
接口定义和mock定义(可单独在一个maven module)
接口类:
package cn.nest.facde; public interface HelloService { String sayHello(String content); }
mock类(mock类和接口类要在同一个项目中,其他项目方便maven依赖):
package cn.nest.facde; @SuppressWarnings("unused") public class HelloServiceMock implements HelloService { public HelloServiceMock() { } @Override public String sayHello(String content) { System.out.println("dubbo mock sample...."); return "say hello fail"; } }
接口实现类:
public class HelloServiceImpl implements HelloService { @Override public String sayHello(String s) { System.out.println("dubbo customer param value: " + s);// mock verify try { Thread.sleep(10 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } boolean isCustomer = RpcContext.getContext().isProviderSide(); System.out.println("provider iscustomer :" + isCustomer);return "say hello :" + s; } }
Dubbo的服务端
Spring 配置文件内容:
接口实现类:
public class HelloServiceImpl implements HelloService {
Dubbo消费端
消费端的配置:
spring 的配置最核心的配置:
<dubbo.reference id="helloService" interface="cn.nest.facde.HelloService" mock="true" timeout="1000" check="false">
消费端代码:
package cn.nest; import cn.nest.facde.HelloService; import cn.nest.facde.HelloSomeOneService; import com.alibaba.dubbo.rpc.RpcContext; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException; @SpringBootApplication public class DubboConsumerApplication implements CommandLineRunner { ApplicationContext factory = new ClassPathXmlApplicationContext("classpath:spring-dubbo-consumer.xml"); public static void main(String[] args) { new SpringApplicationBuilder().sources(DubboConsumerApplication.class).web(false).run(args); while (true) { try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } } } public void run(String... strings) throws Exception { HelloService iHelloService = (HelloService) factory.getBean("helloService"); System.out.println(iHelloService.sayHello("botter")); } }
==============
相关其他知识:
在开发自测,联调过程中,经常碰到一些下游服务调用不通的场景,这个时候我们如何不依赖于下游系统,就业务系统独立完成自测?
dubbo自身是支持mock服务的,在reference标签里,有一个参数mock,该参数有四个值,false
,default
,true
,或者Mock类的类名
。分别代表如下含义:
-
false
,不调用mock服务。 -
true
,当服务调用失败时,使用mock服务。 -
default
,当服务调用失败时,使用mock服务。 -
force
,强制使用Mock服务(不管服务能否调用成功)。(使用xml配置
不生效,使用ReferenceConfig
API可以生效)
使用方法:
-
将mock参数启用,在<dubbo:reference>中添加参数项mock=true。
作者:一滴水的坚持
链接:https://www.jianshu.com/p/ce8de35986cf
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。