转:java
Dubbo的mock本身折腾的实例,配置信息有点简陋,有点粗鄙,若是是处女座的程序员,就建议看看就行哈。程序员
其实Dubbo的mock的实例原理简单而言就是调用真实的接口实现类不通,就会调用你的mock类(mock类和真实实现类都Implements 同一个接口,本身mock的名字要是:接口类名+mock)。web
我这我的直接来例子,不太喜欢讲太多文绉绉的字。处女座的程序员就是这样的哈,比较直接。spring
接口类:maven
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; } }
Spring 配置文件内容:ide
接口实现类:ui
public class HelloServiceImpl implements HelloService {spa
消费端的配置:code
spring 的配置最核心的配置:orm
<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。