版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于Dubbo的分布式架构设计目 录 TOC o 1-3 h z u HYPERLINK l _Toc519327340 1.前言 PAGEREF _Toc519327340 h 3 HYPERLINK l _Toc519327341 2.浅谈分布式架构 PAGEREF _Toc519327341 h 3 HYPERLINK l _Toc519327342 2.1.单系统 PAGEREF _Toc519327342 h 3 HYPERLINK l _Toc519327343 2.2.垂直拆分-多应用 PAGEREF _Toc519327343 h 4 HYPERLINK l _Toc5193
2、27344 2.3.SOA服务化 PAGEREF _Toc519327344 h 4 HYPERLINK l _Toc519327345 3.基于dubbo的实现 PAGEREF _Toc519327345 h 6 HYPERLINK l _Toc519327346 3.1.对外提供服务 PAGEREF _Toc519327346 h 6 HYPERLINK l _Toc519327347 spring-dubbo-config.xml PAGEREF _Toc519327347 h 10 HYPERLINK l _Toc519327348 spring-dubbo-provider.xml
3、PAGEREF _Toc519327348 h 10 HYPERLINK l _Toc519327349 spring-dubbo-consumer.xml PAGEREF _Toc519327349 h 11 HYPERLINK l _Toc519327350 3.2.安装管理控制台 PAGEREF _Toc519327350 h 11 HYPERLINK l _Toc519327351 3.3.消费服务 PAGEREF _Toc519327351 h 13 HYPERLINK l _Toc519327352 4.总结 PAGEREF _Toc519327352 h 21前言现在越来越多的互
4、联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的 SSM(/crossoverJie/SSM.git) 项目来让第一次接触的同学能快速上手。浅谈分布式架构分布式架构单看这个名字给人的感觉就是高逼格,但其实从历史的角度来分析一下就比较明了了。我们拿一个电商系统来说:单系统对于一个刚起步的创业公司项目肯定是追求越快完成功能越好,并且用户量也不大。这时候所有的业务逻辑都是在一个项目中就可以满足。垂直拆分-多应用当业务量和用户量发展到一定地步的时候,这时一般会将应用同时部署到几台服务器上,在用户访问的时候使用Nginx进行反向代理和简单的负载均衡。SOA服务
5、化当整个系统以及发展的足够大的时候,比如一个电商系统中存在有:用户系统订单系统支付系统物流系统等系统。如果每次修改了其中一个系统就要重新发布上线的话那么耦合就太严重了。所以需要将整个项目拆分成若干个独立的应用,可以进行独立的开发上线实现快速迭代。如上图所示每个应用之间相互独立,每个应用可以消费其他应用暴露出来的服务,同时也对外提供服务。从架构的层面简单的理解了,接下来看看如何编码实现。基于dubbo的实现dubbo应该算是国内使用最多的分布式服务框架,基于此来实现对新入门的同学应该很有帮助。其中有涉及到安装dubbo服务的注册中心zookeeper等相关知识点可以自行查看官方文档,这里就不单独
6、讲了。对外提供服务首先第一步需要在SSM-API模块中定义一个接口,这里就搞了一个用户查询的接口/*Function:用户API*authorchenjiec*Date:2017/4/4下午9:46*sinceJDK1.7*/publicinterfaceUserInfoApi/*获取用户信息*paramuserId*return*throwsException*/publicUserInfoRspgetUserInfo(intuserId)throwsException;接着在SSM-SERVICE模块中进行实现:importcom.alibaba.dubbo.config.annotati
7、on.Service;/*Function:*authorchenjiec*Date:2017/4/4下午9:51*sinceJDK1.7*/ServicepublicclassUserInfoApiImplimplementsUserInfoApiprivatestaticLoggerlogger=LoggerFactory.getLogger(UserInfoApiImpl.class);AutowiredprivateT_userServicet_userService;/*获取用户信息*paramuserId*return*throwsException*/Overridepublic
8、UserInfoRspgetUserInfo(intuserId)throwsException(用户查询Id=+userId);/返回对象UserInfoRspuserInfoRsp=newUserInfoRsp();T_usert_user=t_userService.selectByPrimaryKey(userId);/构建buildUserInfoRsp(userInfoRsp,t_user);returnuserInfoRsp;/*构建返回*paramuserInfoRsp*paramt_user*/privatevoidbuildUserInfoRsp(UserInfoRspus
9、erInfoRsp,T_usert_user)if(t_user=null)t_user=newT_user();CommonUtil.setLogValueModelToModel(t_user,userInfoRsp);这些都是通用的代码,但值得注意的一点是这里使用的dubbo框架所提供的service注解。作用是声明需要暴露的服务接口。再之后就是几个dubbo相关的配置文件了。spring-dubbo-config.xml其实就是配置我们服务注册的zk地址,以及服务名称、超时时间等配置。spring-dubbo-provider.xml这个配置扫描注解包的位置,一般配置到接口实现包即可。
10、spring-dubbo-consumer.xml这个是消费者配置项,表明我们需要依赖的其他应用。这里我们在SSM-BOOT项目中进行配置:直接就是配置的刚才我们提供的那个用户查询的接口,这样当我们自己的内部项目需要使用到这个服务只需要依赖SSM-BOOT即可,不需要单独的再去配置consumer。这个我有在上一篇SSM(十) 项目重构-互联网项目的Maven结构(http:/crossoverjie.top/2017/03/04/SSM10/#SSM-BOOT)中也有提到。安装管理控制台还有一个需要做的就是安装管理控制台,这里可以看到我们有多少服务、调用情况是怎么样等作用。这里我们可以将du
11、bbo的官方源码下载下来,对其中的dubbo-admin模块进行打包,将生成的WAR包放到Tomcat中运行起来即可。但是需要注意一点的是:需要将其中的perties的zk地址修改为自己的即可。dubbo.registry.address=zookeeper:/:2181dubbo.admin.root.password=rootdubbo.admin.guest.password=guest到时候登陆的话使用root,密码也是root。使用guest,密码也是guest。登陆界面如下图:其中我们可以看到有两个服务以及注册上去了,但是没有消费者。消费服务为了能够更直观的体验到消费服务,新建了一
12、个项目:/crossoverJie/SSM-CONSUMER。其中在SSM-CONSUMER-API中我也定义了一个接口:/*Function:薪资API*authorchenjiec*Date:2017/4/4下午9:46*sinceJDK1.7*/publicinterfaceSalaryInfoApi/*获取薪资*paramuserId*return*throwsException*/publicSalaryInfoRspgetSalaryInfo(intuserId)throwsException;因为作为消费者的同时我们也对外提供了一个获取薪资的一个服务。在SSM-CONSUMER-
13、SERVICE模块中进行了实现:/*Function:*authorchenjiec*Date:2017/4/4下午9:51*sinceJDK1.7*/ServicepublicclassSalaryInfoApiImplimplementsSalaryInfoApiprivatestaticLoggerlogger=LoggerFactory.getLogger(SalaryInfoApiImpl.class);AutowiredUserInfoApiuserInfoApi;/*获取用户信息*paramuserId*return*throwsException*/Overridepublic
14、SalaryInfoRspgetSalaryInfo(intuserId)throwsException(薪资查询Id=+userId);/返回对象SalaryInfoRspsalaryInfoRsp=newSalaryInfoRsp();/调用远程服务UserInfoRspuserInfo=userInfoApi.getUserInfo(userId);salaryInfoRsp.setUsername(userInfo.getUserName();returnsalaryInfoRsp;其中就可以直接使用userInfoApi调用之前的个人信息服务。再调用之前需要注意的有点是,我们只需要依
15、赖SSM-BOOT这个模块即可进行调用,因为SSM-BOOT模块已经为我们配置了消费者之类的操作了:com.crossoverJieSSM-BOOT还有一点是在配置SSM-BOOT中的spring-dubbo-cosumer.xml配置文件的时候,路径要和我们初始化spring配置文件时的路径一致:contextConfigLocationclasspath*:spring/*.xml接下来跑个单测试一下能否调通:/*Function:*authorchenjiec*Date:2017/4/5下午10:41*sinceJDK1.7*/RunWith(SpringJUnit4ClassRunne
16、r.class)ContextConfiguration(locations=classpath*:/spring/*.xml)publicclassSalaryInfoApiImplTestAutowiredprivateSalaryInfoApisalaryInfoApi;TestpublicvoidgetSalaryInfo()throwsExceptionSalaryInfoRspsalaryInfo=salaryInfoApi.getSalaryInfo(1);System.out.println(JSON.toJSONString(salaryInfo);消费者提供者可以看到确实是调用成功了的。接下来将消费者项目也同时启动在来观察管理控制台有什么不一样:会看到多了一个消费者所提供的服务com.crossoverjie.consumer.api.SalaryInfoApi,同时com.crossoverJie.api.UserInfoApi服务已经正常,说明已经有消费者了。点进去便可查看具体的消费者。总结这样一个基于dubbo的分布式服务已经差不多了,在实际的开发中我们便会开发一个大系统中的某一个子应用,这样就算一个子应用出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 虚拟现实体验场所安全管理条例
- 车辆保险培训课件
- 2025江苏南京市生态环境局所属事业单位招聘高层次人才2人备考题库及参考答案详解
- 助眠服务话术指南
- 2026福建福州市鼓楼区城市管理综合执法大队人员招聘2人备考题库及参考答案详解一套
- 2026重庆万州区长滩镇非全日制公益性岗位工作人员招聘1人备考题库及参考答案详解1套
- 护理职业发展与就业指导
- 2026重庆医疗器械质量检验中心招聘2人备考题库及完整答案详解一套
- 驾驶员培训课件软件
- 个人所得税申报可靠准确责任承诺书(8篇)
- 五年级简便计算100题
- 三年级作文写小狗海滩冬天童话故事
- (康德卷)重庆市2024届高三一诊物理试卷(含答案)
- 重庆市沙坪坝小学小学语文五年级上册期末试卷
- 中药制剂技术中职PPT完整全套教学课件
- 龙虎山正一日诵早晚课
- 《国际学术论文写作与发表》学习通超星课后章节答案期末考试题库2023年
- 中考满分(合集15篇)
- 艺术课程标准(2022年版)
- 《大数据营销》-课程教学大纲
- JJF 1654-2017平板电泳仪校准规范
评论
0/150
提交评论