一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目
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"
2.接口实现项目-服务的实现者
BrandServiceImpl.java
其它相关代码和配置
<bean id="brandService" class="com.webservice.service.impl.BrandServiceImpl"/>
<dubbo:service interface="com.webservice.service.front.BrandService" version="1.0.0"
3.本地测试项目
单元测试:mapper、dao、service
参考前一篇的单元测试代码,初始化+标准4步
4.dubbo远程测试项目
单元测试:service(不可能知道dao和mapper的实现),参考上一篇单元测试代码
Java应用测试:service,调用方也可能是普通的Java应用程序调用(模拟真实场景1)
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个项目的更多相关文章
- 一个电商项目的Web服务化改造
一个电商项目的Web服务化改造 项目,早期是随便瞎做的,没啥架构,连基本的设计也没. 有需求,实现需求,再反复修改. 大致就是这么做的. 最近,项目要重新架构,和某boss协商的结果是,采用阿里开源的 ...
- 一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 单元测试,在很早之前的文章已经介绍过. 可以在这里看到相关的 ...
- 一个电商项目的Web服务化改造3:改进方案の规范和约定、单表、单一职责
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 上一篇,我们描述了原有项目中的问题. 或者说是,本篇的基本 ...
- 一个电商项目的Web服务化改造5:面向服务的分层架构设计(有图有真相)
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 本篇,以我亲自画的3个图,阐述一下架构设计. 一.分层架构-总体图 ...
- 一个电商项目的Web服务化改造4:方案和架构,通用接口的定义和实现
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 上一篇,我们明确了我们的"规范和约定". 从 ...
- 一个电商项目的Web服务化改造2:现有项目的5个问题
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步, 1.现有项目的问题 1.1代码风格不统一 不同的 ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
随机推荐
- oc78--NSFileManager
// main.m // NSFileManager #import <Foundation/Foundation.h> int main(int argc, const char * a ...
- XAML实例教程系列 - 对象和属性(二)
XAML实例教程系列 - 对象和属性 2012-05-22 14:18 by jv9, 1778 阅读, 6 评论, 收藏, 编辑 在前一篇已经介绍XAML概念:“XAML语言是Extensible ...
- windows下安装MySQL-python遇到的问题
执行安装命令 pip install MySQL-python 一.执行时会报一个错误 error: Microsoft Visual C++ 9.0 is required (Unable to f ...
- PCB 自动发送邮件---加入表格实现方法
先看一下手动发送邮件内容加入表格操作(下图所示),直接复制Excel内容,再粘贴到邮件内容中,就是这么便捷,如果我们想自动发送邮件,也实现同样的效果如果实现呢,在这里介绍2种方法: 一.读取Excel ...
- ubuntu下的路由实验
这个实验先演示两个client是如何通过路由器进行通信的. 我们至少需要三个虚拟机:clientA.clientB和route. 对clientA的网卡进行设置: #the primary netwo ...
- 常见的Java Script内存泄露原因及解决方案
前言 内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了 ...
- 基于Spark Streaming预测股票走势的例子(二)
上一篇博客中,已经对股票预测的例子做了简单的讲解,下面对其中的几个关键的技术点再作一些总结. 1.updateStateByKey 由于在1.6版本中有一个替代函数,据说效率比较高,所以作者就顺便研究 ...
- Android Studio 快捷键整理
Alt+回车 导入包,自动修正 Ctrl+N 查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L 格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert 生成代码(如ge ...
- Ubuntu14.4安装mysql
一.安装 apt-get install mysql-server mysql-client 设置用户名和密码 二.检查 sudo service mysql restart 三.支持 1.apach ...
- Caffe2:段错误(核心 已转储)
测试Caffe的时候, cd ~ && python -c 'from caffe2.python import core' 2>/dev/null && ech ...