当消费端用于测试自己逻辑的时候,可以通过mock的方法来实现不需要服务端的测试。
1.实现方式也就是在消费端新建一个与实现类,该实现类实现需要调用的接口,并且
实现类=接口完全地址+Mock(如果不一致,则找不到这个mock,会报错)
2.在消费端配置不检查服务端是否存在,check= false
3.设置消费端进入mock模式, mock = true
4.直接调用即可
注意,此处存在一个 逻辑,当调用的时候,还是回去找服务端,尝试连接不上的时候才会去调用mock实现类。
ReferenceConfig<GreetingService> referenceConfig = new ReferenceConfig<>();
referenceConfig.setApplication(new ApplicationConfig("mock-consumer"));
referenceConfig.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
referenceConfig.setTimeout(5000);
referenceConfig.setInterface(GreetingService.class);
referenceConfig.setVersion("1.0.0");
referenceConfig.setGroup("dubbo");
referenceConfig.setCheck(false);
referenceConfig.setMock(true);
GreetingService greetingService = referenceConfig.get();
RpcContext.getContext().setAttachment("company","alibaba");
System.out.println(greetingService.sayHello("world"));
原理
image.png
消费端调用get()后再init()方法中会checkMock(),checkMock()回对mock配置做校验和转换
mock的真正实现则是再MockClusterInvoker中实现
image.png
网友评论