轉: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。