使用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"/>
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(); } }
个人观察:面向接口编程。接口调用方,只知道接口,而不知道实现, 真是不错。
标签:Dubbo,调用,Web,dubbo,BrandService,接口,brandService,classPathXmlApplicationContext,电 From: https://blog.51cto.com/fansunion/6245778