课件day02 分布式架构_第1页
课件day02 分布式架构_第2页
课件day02 分布式架构_第3页
课件day02 分布式架构_第4页
课件day02 分布式架构_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、谷粒商城 版本:V 1.0一、分布式架构1 分布式架构的演进1.1 单一应用架构适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。缺点: 1、性能扩展比较难 2、协同开发问题 3、不利于升级维护1.2 垂直应用架构通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有针对性。缺点: 公用模块无法重复利用,开发性的浪费1.3 分布式应用架构将各个应用通过分层独立出来,可以利用rpc实现web与service、service与service的互相调用,提高了代码的复用性。缺点: 每个调用的模块要存储一份完整的被调用模块的位置和状

2、态,一旦位置和状态发生变化,就要更新所有涉及的配置。1.4 面向服务的分布式架构随着架构不断增大,服务节点也越来越多,服务之间的调用和依赖关系也越来越复杂,需要有一个统一的中心来调度、路由、管理所有的服务,基于这个中心构建的这个星型架构就是现在目前最主流的SOA分布式架构。1.5 dubbo架构图Dubbo :注册中心采用zookeeper!Dubbo : 订阅发布服务功能!1.6 dubbo注册中心官网:推荐使用Zookeeper 注册中心使用:1. 依赖jar 包2. 配置a) 配置单机版 b) 配置集群版 1.7 使用dubbo/zh-cn/d

3、ocs/user/configuration/annotation.html1.8 最佳实战1. 配置版本2. 序列化 1.9 推荐用法2 如何实现这种SOA架构 原来所有的controller、service接口、service实现都在一个工程,通过Spring的ioc就可以实现互相调用。那么假如controller和service实现隶属于不同的应用如何实现调用呢?答案:rpc,dubbo, spring cloud 3 项目构成1. Commons 共通模块内容a) gmall-parent定义jar包的版本,springBoot,dubbo,zookeeper,apache工具类2.

4、共通中又分为:web-util,service-util【redis】a) Web-util 内容包括i. Commons,thymeleaf【前端显示模板】ii. springBoot可以要jsp作为显示的模板,需要自己手动配置spring.mvc.view.suffix=.jspspring.mvc.view.prefix=/WEB-INF/jsp/b) Service-util 内容包括i. Commons,mysql,redis,activemq【消息队列-分布式事务】二、分布式工程的模块搭建在新建项目的时候,注意修改maven的本地仓库配置idea 的信息 调整idea占用磁盘空间在

5、安装目录:perties idea.config.path=E:/idea/configidea.system.path=E:/idea/system默认配置如下:# idea.config.path=$user.home/.IntelliJIdea/config# idea.system.path=$user.home/.IntelliJIdea/system依赖关系使用Maven 构建:依赖,继承,聚合【pom.xml packaging pom】1 搭建parent模块parent模块的 pom.xml 4.0.0 com.atguigu.gmall gmall-pare

6、nt 1.0-SNAPSHOT pom UTF-8 UTF-8 1.8 1.2.46 1.0.10 2.6.0 0.10 1.3.1 1.9.20 1.4.01 1.9.1 1.11.2 4.5.5 3.7 1.2.3 2.9.0 5.3.3 4.5.1 1.9.3 org.springframework.boot spring-boot-starter-parent 1.5.10.RELEASE com.alibaba fastjson $fastjson.version com.alibaba dubbo $dubbo.version com.101tec zkclient $zkclie

7、nt.version com.gitee.reger spring-boot-starter-dubbo $dubbo-starter.version org.mybatis.spring.boot mybatis-spring-boot-starter $mybatis.version net.sourceforge.nekohtml nekohtml $nekohtml.version xml-apis xml-apis $xml-apis.version org.apache.xmlgraphics batik-ext $batik-ext.version org.jsoup jsoup

8、 $jsoup.version org.apache.httpcomponents httpclient $httpclient.version mons commons-lang3 $commons-lang3.version tk.mybatis mapper-spring-boot-starter $mapper-starter.version redis.clients jedis $jedis.version io.searchbox jest $jest.version net.java.dev.jna jna $jna.version commons-

9、beanutils commons-beanutils $beanUtils.version 然后在idea右边菜单执行安装Install 之后,将项目安装到本地仓库!2 创建bean模块or实体类:bean,pojo,entity,domain,vo ,dto 将所有的bean 类都放到该项目中 gmall-bean 中例如:UserInfo类bean模块的pom.xml 4.0.0 com.atguigu.gmall gmall-bean 1.0-SNAPSHOT gmall-parent com.atguigu.gmall 1.0-SNAPSHOT tk.mybatis mapper-s

10、pring-boot-starter org.springframework.boot spring-boot-starter-jdbc jectlombok lombok 3 搭建interface模块interface的pom.xml com.atguigu.gmall gmall-interface 1.0-SNAPSHOT 4.0.0 jar com.atguigu.gmall gmall-parent 1.0-SNAPSHOT com.atguigu.gmall gmall-bean 1.0-SNAPSHOT 将原来的UserInfoService 模块放到该模块中如果

11、写mapper 不利于后期维护,mapper 应该放在具体的模块项目中-service。4 搭建 util模块首先我们可以把所有的第三方依赖包分为三种1、 web业务模块用到的第三方包,比如文件上传客户端、页面渲染工具、操作cookie的工具类等等。2、 service业务模块用到的第三方包,比如jdbc、mybatis、jedis、activemq工具包等等。3、 通用型的第三方包,比如fastjson、httpclient、apache工具包等等。4、 只有本模块用到的 es 基于这三种情况我们可以搭建如下的依赖结构: 创建common-util的模块pom.xml文件 首先先分析具体哪些

12、包是通用的gmall-common-utilspring-boot-starter-test测试(springboot有默认版本号)spring-boot-starter-web内含tomcat容器、HttpSevrletRequest等(springboot有默认版本号)fastjsonjson工具commons-lang3方便好用的apache工具库commons-beanutils方便好用的apache处理实体bean工具库commons-codec方便好用的apache解码工具库sso用到httpclientrestful调用客户端gmall-common-util的pom.xml 4

13、.0.0 com.atguigu.gmall gmall-common-util 1.0-SNAPSHOT com.atguigu.gmall gmall-parent 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-test org.springframework.boot spring-boot-starter-web org.apache.httpcomponents httpclient mons commons-lang3 commons-beanutils commons-beanuti

14、ls commons-codec commons-codec com.alibaba fastjson 创建service-util模块gmall-service-utilspring-boot-starter-jdbc数据库驱动(springboot有默认版本号)mysql-connector-java数据库连接器(springboot有默认版本号)mybatis-spring-boot-startermybatisgmall-service-util的pom.xml gmall-parent com.atguigu.gmall 1.0-SNAPSHOT 4.0.0 gmall-servic

15、e-util com.atguigu.gmall gmall-common-util 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-jdbc org.mybatis.spring.boot mybatis-spring-boot-starter mysql mysql-connector-java runtime redis.clients jedis 创建web-util模块gmall-web-utilthymeleafspringboot自带页面渲染工具(springboot有默认版本号)gmall-web-util 项

16、目gmall-web-util的pom.xml gmall-parent com.atguigu.gmall 1.0-SNAPSHOT 4.0.0 gmall-web-util com.atguigu.gmall 1.0-SNAPSHOT com.atguigu.gmall gmall-common-util 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-thymeleaf 注意:到此处要休息片刻!install gmall-parent! 如果没有问题,则继续下面步骤!5 重构gmall-usermanage 模块有页面等

17、参与,相当于服务。Springboot项目#gmall-usermanage 项目中 pom.xml gmall-parent com.atguigu.gmall0416 1.0-SNAPSHOT ./gmall-parent/pom.xml com.atguigu.gmall0416 gmall-interface 1.0-SNAPSHOT com.atguigu.gmall0416 gmall-service-util 1.0-SNAPSHOT 代码开发5.1 beanpublic class UserInfo implements Serializable Id Column priva

18、te String id; Column private String loginName; Column private String nickName; Column private String passwd; Column private String name; Column private String phoneNum; Column private String email; Column private String headImg; Column private String userLevel;注意:Column 和Id 都是javax.persistence包中的技巧

19、idea快捷键:alt+insert可以快速插入getter 和setter5.2 Mapper通常跟实体类+Mapperpublic interface UserInfoMapper extends Mapper 注意: Mapper也是引用mon.Mapper包中的Idea 有的时候校验Autowired不准 可以把校验关闭settings - Inspections - spring-spring core - code- Autowiring for Bean class5.3 serviceService接口将其放到gmall-interfa

20、cepackage com.atguigu.gmall.servicepublic interface UserInfoService List getUserInfoList();5.4 ServiceImpl在gmall-usermanage中添加service.implServicepublic class UserInfoServiceImpl implements UserInfoService Autowired private UserInfoMapper userInfoMapper; Override public List getUserInfoList() return

21、userInfoMapper.selectAll(); 5.5 ControllerControllerpublic class UserInfoController Autowired private UserInfoService userInfoService; RequestMapping(findAll) ResponseBody public List findAll() List userInfoList = userInfoService.getUserInfoList(); return userInfoList; 5.6 测试import tk.mybatis.spring

22、.annotation.MapperScan;SpringBootApplicationMapperScan(basePackages = com.atguigu.gmall.usermanage.mapper)public class GmallOrderServiceApplication public static void main(String args) SpringApplication.run(GmallOrderServiceApplication.class, args); 5.7 pertiesserver.port=8080spring.d

23、atasource.url=jdbc:mysql:/localhost:3306/gmall?characterEncoding=UTF-8spring.datasource.username=rootspring.datasource.password=root6 实现订单的Web应用(Controller)调用用户的Service应用的用户地址信息功能用户与订单有关系么?通过用户id查找订单信息用户地址6.1 搭建订单的gmall-order-web模块工程# pertiesserver.port=8081需要开发的类包类说明controllerOrderControllerweb controller由于需要让订单的web应用可以调用用户的Service接口,那么必须在订单的工程中也要包含一份Service接口。如果拷贝一个接口到订单工程中,那么如果以后有更多的模块都调用这个接口呢?每个都拷贝一份接口类么? 这种情况我们就可以利用maven的依赖把这些接口作为公共的包管理起来。 同时接口类种的方法也引用了很多的实体bean, 那么同样的实体bean的类我们也统一管理起来。 这样我们就有了如下的依赖关系:Pom.xml 依赖关系 com.atguigu.gmall gmall-parent 1.0-SNAP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论