一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目

使用dubbo服务的过程,很简单,和之前学习的WebService完全一样,和本地接口调用也基本一致。

dubbo和WebService的区别:我认为dubbo就是封装了WebService,然后提供了更多的配套功能。看jar包依赖,dubbo依赖的WebService。(青出于蓝,而胜于蓝。冰,水为之,而寒于水。)
    dubbo接口和本地service接口的区别:dubbo调用的是远程方法,本地调用的本地方法

作为服务的实现方,或者说最初负责“服务化改造” 的人来说,你需要考虑到怎么简化调用方的工作,怎么测试服务方的接口。因此, 我认为需要4个项目。

1.接口项目-调用者只需要知道这个
   服务调用方和服务提供方的交互接口。
   定义服务的接口,公共的mobel、bean等实体类。
   BrandService.java,Brand.java,BrandBean.java
  
   dubbo服务配置:
 <dubbo:reference id="brandService" interface="com.webservice.service.front.BrandService" version="1.0.0"

   url="webservice://127.0.0.1:9000/com.webservice.service.front.BrandService"/>
 一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目

2.接口实现项目-服务的实现者 
   BrandServiceImpl.java
   其它相关代码和配置
  <bean id="brandService" class="com.webservice.service.impl.BrandServiceImpl"/>

   
 <dubbo:service interface="com.webservice.service.front.BrandService" version="1.0.0"
   protocol="webservice" ref="brandService"/>

3.本地测试项目 
   单元测试:mapper、dao、service
   参考前一篇的单元测试代码,初始化+标准4步

4.dubbo远程测试项目 
   单元测试:service(不可能知道dao和mapper的实现),参考上一篇单元测试代码
   Java应用测试:service,调用方也可能是普通的Java应用程序调用(模拟真实场景1)

   Web应用测试: service,调用方,有较大可能是Web项目调用(模拟真实场景2)
 public class BrandServiceTest {
public static void main(String[] args) {
String configLocation = "classpath*:spring-context-nodubbo.xml";
configLocation = "spring-context-dubbo.xml";
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(
configLocation);
classPathXmlApplicationContext.start();
BrandService brandService = (BrandService) classPathXmlApplicationContext
.getBean("brandServiceImpl");
//BrandService brandService = (BrandService) classPathXmlApplicationContext
// .getBean(BrandService.class);
//找不到,名字是brandServiceImpl,或者根据类型
//BrandService brandService = (BrandService) classPathXmlApplicationContext
// .getBean("brandService");
List<Brand> brandList = brandService.listAll();
for (Brand brand : brandList) {
System.out.println("=====================================");
System.out.println(brand.getName());
System.out.println("=====================================");
}
classPathXmlApplicationContext.close(); }
}

@Controller
@RequestMapping("brand")
public class BrandController { @Autowired
private BrandService brandService; @ResponseBody
@RequestMapping("listAll")
public List<Brand> listAll(){
return brandService.listAll();
} }

一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目

 个人观察:面向接口编程。接口调用方,只知道接口,而不知道实现, 真是不错。

上一篇:架构师之路-在Dubbo中开发REST风格的远程调用


下一篇:ES 使用小结