【原】从零开始改造淘淘商城(引入dubbo解决项目耦合)02
前言:
关于为什么要引入dubbo框架,而不是用spring cloud或者是motan呢,主要是笔者现在公司用的就是dubbo,并且第一次接触到微服务的概念是来源于dubbo,再加上最近dubbo频繁的更新,所以就有采用dubbo改造的想法。建议没看过这个教程的园友可以先看看原来的教程,因为现在所改造的是基于原来的教程源码上重构的版本。
首先看下改造前的一个版本如下(前台主站):

通过上图可知portal不负责db操作,而是通过调用rest项目完成数据更新或查询;笔者现在的公司项目也有很多这种调用方式,主要原因是因为调用方是一个非常古老的项目,系所采用的架构是ssh,且项目比较庞大,耦合度很高,并且大量的业务逻辑代码挤压在一起,短时间内无法重构成微服务,所以目前用的也是httpclient方式去调用rest服务。这种方式有几个不好的地方如下:
- 后续加了一个新的服务调用地址,需要在对应的配置文件里配置地址,大量的配置文件出现会导致项目难以管理,维护成本变高。
- http的3次握手以及传输过程中的网络开销等等。
- 由于是在service层发起http请求,Controller直接调用工程里的service,如果某天service下面的ItemService需要部署更新,由于这些代码都是在放在同一个项目不同包的下面,是一个整体,必然会导致淘淘商城里面的OrderService,SerachService,CartService等不需要维护的也不能正常提供服务。
解决办法:
- 统一服务接口层,服务接口层只负责对外提供服务,调用方只负责调用的服务接口; 假如某天服务提供者需要部署更新,那么只需要部署对应的服务, 比如订单服务,更新的的只是订单服务,不会影响其他服务的提供,同理调用方也不会因为订单服务要维护导致调用方也跟着受影响,顶多就是当前更新的这个服务用不了而已,简单来说就是减少颗粒度范围。
重构思路:
将每个项目中的service接口层提取出来,放到taotao-service-api里,然后将taotao-manager-service做成服务提供者,实现taotao-service-api所有的接口,也就是dubbo里面的Provider;将rest、portal项目作为dubbo里面的Consumer角色,引用taotao-service-api。
重构后项目结构如下:

【原】从零开始改造淘淘商城(引入dubbo解决项目耦合)02的更多相关文章
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第十三天(非原创)
文章大纲 一.课程介绍二.SolrCloud介绍与搭建三.工程部署四.参考资料下载五.参考文章 一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Svn的使用 ...
- 001淘淘商城项目:项目的Maven工程搭建
开始一个新的项目,特此记录,资料全部来源于传智播客,感谢. 我们要做一个类似电商的项目.用maven做管理. maven里面主要分为三种工程: 1:pom工程:用在父级工程,聚合工程中 2:war工程 ...
- 淘淘商城_day11_课堂笔记
今日大纲 发布前的准备 实施发布 一部分是由我来发布 一部分是由你们来发布 讲解分布式部署架构 测试 功能测试 压力测试 项目实战的准备以及分组 分组 抽取功能 讲解所需要开发的功能 项目部署上线流程 ...
- JAVAEE——淘淘商城第一天:电商行业的背景和技术特点,商城的介绍、技术的选型、系统架构和工程搭建
1. 学习计划 1.电商行业的背景. 2.电商行业的技术特点 3.商城的介绍 a) 常用的名词介绍 b) 系统功能介绍 4.淘淘商城的系统架构 a) 传统架构 b) 分布式架构 c) 基于服务的架构 ...
- day78_淘淘商城项目_11_单点登录系统实现 + 用户名回显 + ajax请求跨域问题详解_匠心笔记
课程计划 1.SSO注册功能实现 2.SSO登录功能实现 3.通过token获得用户信息 4.ajax跨域请求解决方案--jsonp 1.服务接口实现 SSO系统就是解决分布式环境下登录问题的,本 ...
- (转)淘淘商城系列——使用maven构建工程
http://blog.csdn.net/yerenyuan_pku/article/details/72669269 开发工具和环境 这里,我统一规范一下淘淘商城的开发工具和环境,如下: Eclip ...
- (转) 淘淘商城系列——CMS内容管理系统工程搭建
http://blog.csdn.net/yerenyuan_pku/article/details/72825801 淘淘商城系列——CMS内容管理系统工程搭建 上文我们一起搭建了表现层中的商城门户 ...
- (转) 淘淘商城系列——Redis集群的搭建
http://blog.csdn.net/yerenyuan_pku/article/details/72860432 本文我将带领大家如何搭建Redis集群.首先说一下,为何要搭建Redis集群.R ...
- day68_淘淘商城项目_01
原文:day68_淘淘商城项目_01 课程计划 第一天: 1.电商行业的背景介绍--电子商务 2.淘淘商城的系统架构 a) 功能介绍 b) 架构讲解 3.工程搭建--后台工程 a) 使用maven搭建 ...
随机推荐
- BZOJ 2653: middle [主席树 中位数]
传送门 题意: 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整.给你一个 长度为n的序列s.回答Q个这样的询问:s的左端点在[a,b]之间,右 ...
- Azure ARM (21) Azure订阅的两种管理模式
<Windows Azure Platform 系列文章目录> 熟悉Azure平台的读者都知道,Microsoft Azure服务管理,分为三个层次: 1.企业服务合同 (Enterpri ...
- Visual Studio 2017 for Mac 快捷键
格式化代码: ^I 转到定义:⌘D 注释/反注释: ⌘/ 生成:⌘B 重新生成:^⌘B 调试运行:⌘↩ 不调试运行:⌥⌘↩ 添加/删除断点:⌘\ 查看所有断点:⌥⌘↩ 放大:⌘+ 缩小:⌘- 正常大 ...
- python中常见的三种句型if,while,for
1.if语句: 特别说明:条件后面的冒号不能少,同样必须是英文字符. 特别特别说明:if内部的语句需要有一个统一的缩进,一般用4个空格.python用这种方法替代了其他很多编程语言中的{}. num= ...
- Ubuntu下的Samba服务器配置
一. samba的安装: sudo apt-get insall samba 二. 创建共享目录: mkdir /home/phinecos/share sodu chmod 777 /home/ge ...
- Netty的常用概念
我们先来看一段代码: // Configure the server. EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGr ...
- httpd的三种模式比较
查看你的httpd使用了哪种模式: /usr/local/apache2/bin/httpd -V |grep 'Server MPM' 使用哪种模式,需要在编译的时候指定 --with-mpm=pr ...
- 听闰土大话前端之ES6是怎么来的
前言 相信做前端的朋友没有不知道ECMAScript6的,都知晓ES6新增了不少新的特性,但是你知道ES6是怎么来的吗?今天就让闰土来带大家大话ES6的前世今生.当然了,这篇文章会以扫盲为主,科普为辅 ...
- XAMPP环境访问非Web DocumentRoot下绝对路径
假设你的XAMPP网站文档根目录在C:/xampp/apache/htdocs/下面,那么访问这个目录下的文件是很直接的. 但是有时候需要把用户上传文件指定到特殊目录,比如E盘,那么就需要用户能够访问 ...
- MySQL数据库基础(四)(子查询与链接)
1.子查询简介 其中,所谓的"外层查询"并不是指"查找",指的是所有SQL语句的统称:结构化查询语言(Structured Query Language),简称 ...