搭建大型分布式服务(十四)SpringBoot整合dubbo starter
一、本文要点
接上文,我们已经把SpringBoot整合mybatis+Hikari+es+redis+kafka了,本文将介绍SpringBoot如何整合dubbo。系列文章完整目录
dubbo注解版使用
dubbo provider、dubbo consumer
maven多模块配置、maven批量修改项目版本号
springboot整合dubbo、zookeeper、zookeeper集群配置
springboot + mybatis + Hikari + elasticsearch + redis + dubbo
二、开发环境
- jdk 1.8
- maven 3.6.2
- springboot 2.4.3
- dubbo-starter 2.0
- dubbo 2.6.0
- zookeeper 3.4.13
- idea 2020
三、修改项目结构
1、由于我们需要把会员服务做成dubbo服务,需要提供API给消费者,所以需要抽取出API供消费者使用。
2、创建member-service目录,创建parent的pom.xml。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mmc.lesson</groupId><artifactId>member-service</artifactId><packaging>pom</packaging><version>1.0.0-SNAPSHOT</version><modules><module>api</module><module>member</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.3</version><relativePath/> <!-- lookup parent from repository --></parent><!-- 统一多模块的依赖版本 --><dependencyManagement><dependencies></dependencies></dependencyManagement><!-- 统一版本号 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies></dependencies></project>
2、在member-service目录下创建api模块,修改api项目的pom.xml。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>com.mmc.lesson</groupId><artifactId>member-service</artifactId><version>1.0.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>member-api</artifactId><dependencies></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><executions><execution><id>attach-sources</id><goals><goal>jar</goal></goals></execution></executions></plugin></plugins></build></project>
3、在api模块中,定义一个会员接口MemberApi.java和必须的实体类,MemberInfo.java跟db一致。
public interface MemberApi {/*** 获取会员.*/Result get(MemberInfo member);/*** 保存会员.*/Result save(MemberInfo member);
}
@Data
public class Result {private int code;private String message;private Object data;public static Result ok(Object data) {Result r = new Result();r.setCode(0);r.setMessage("SUCCESS");r.setData(data);return r;}public static Result fail(String message) {Result r = new Result();r.setCode(-1);r.setMessage(message);r.setData(null);return r;}
}
4、将原来member项目,移动到member-service目录,并修改原member模块的pom.xml。注意:省略了系列文章配置的依赖,请查看源码。主要改动点,修改了parent标签,增加了dubbo、zookeeper依赖。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.mmc.lesson</groupId><artifactId>member-service</artifactId><version>1.0.0-SNAPSHOT</version></parent><artifactId>member</artifactId><name>member</name><description>Member Service</description><properties><java.version>1.8</java.version><version.mybatis>1.3.0</version.mybatis><version.mysql>5.1.48</version.mysql></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 此处省略了好多系列文章的依赖 --><!-- dubbo --><dependency><groupId>com.mmc.lesson</groupId><artifactId>member-api</artifactId><version>${project.version}</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba.spring.boot/dubbo-spring-boot-starter --><dependency><groupId>com.alibaba.spring.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.0.0</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.9</version></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.2</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId></dependency></dependencies></project>
5、修改MemberService.java,使其实现MemberApi.java接口,并增加com.alibaba.dubbo.config.annotation.Service注解,暴露dubbo服务。改动点:实现MemberApi接口,其中的converXXX方法是idea插件生成的,同学们可以换成BeanUtil。
@Slf4j
@Service
@com.alibaba.dubbo.config.annotation.Service(interfaceClass = MemberApi.class)
public class MemberService implements MemberApi {// 省略了好多系列文章的代码@Overridepublic Result get(MemberInfo member) {TblMemberInfo info = convertMember(member);TblMemberInfo data = get(info);if (null == data) {return Result.fail("会员不存在");}return Result.ok(convertMember(data));}@Overridepublic Result save(MemberInfo member) {TblMemberInfo info = convertMember(member);TblMemberInfo data;try {data = save(info);} catch (Exception e) {return Result.fail(e.getMessage());}return Result.ok(convertMember(data));}// 省略了好多系列文章的代码
}
四、修改配置文件
修改application-dev.properties文件,同理,后面发布到测试、正式环境的话,修改对应的配置文件。这里增加dubbo的配置。
#################### DUBBO ####################
spring.application.name=member-service
spring.dubbo.server=true
spring.dubbo.registry.address=zookeeper://9.134.77.133:2181
# 集群版配置如下
#spring.dubbo.registry.address=zookeeper://9.134.77.133:2181?backup=9.134.77.133:2182,9.134.77.133:2183
五、修改启动类
1、修改MemberApplication,@EnableDubboConfiguration启用dubbo配置。
@EnableDubboConfiguration
@MapperScan(basePackages = "com.mmc.lesson.member.mapper")
@SpringBootApplication
public class MemberApplication {public static void main(String[] args) {SpringApplication.run(MemberApplication.class, args);}
}
六、运行一下
1、编写单元测试。
@Slf4j
@ActiveProfiles("dev")
@ExtendWith(SpringExtension.class)
@SpringBootTest
@Transactional
public class DubboMemberServiceTest {@Referenceprivate MemberApi memberApi;@Testvoid testGet() {MemberInfo member = new MemberInfo();member.setUid(888L);Result ret = memberApi.get(member);log.info("--------------------------------------------------------");log.info("ret: {}", GsonUtil.toJson(ret));}}
2、效果,可以看到dubbo方法已经被正常调用了。
[2021-03-26 17:40:08.405] [main] [DEBUG] [org.mybatis.spring.SqlSessionUtils:?] - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71df5f30]
[2021-03-26 17:40:08.406] [main] [INFO] [c.mmc.lesson.member.service.DubboMemberServiceTest:?] - --------------------------------------------------------
[2021-03-26 17:40:08.410] [main] [INFO] [c.mmc.lesson.member.service.DubboMemberServiceTest:?] - ret: {"code":-1,"message":"会员不存在"}
[2021-03-26 17:40:08.412] [main] [DEBUG] [o.s.t.c.c.DefaultCacheAwareContextLoaderDelegate:?] - Retrieved ApplicationContext [1390301622] from cache with key [[WebMergedContextConfiguration@5167f57d testClass = DubboMemberServiceTest, locations = '{}', classes = '{class com.mmc.lesson.member
3、后面MemberApi接口有变动,增加字段或者增加方法啥的,可以执行以下命令,提升接口版本。
# 在父pom.xml目录下执行mvn versions:set -DnewVersion=1.0.1 -DgenerateBackupPoms=false
七、小结
这里只是简单介绍如何整合dubbo,更加详细的用法请关注后续文章,完整代码地址:戳这里。下一篇《搭建大型分布式服务(十五)Docker搭建开发环境安装Apollo》
加我一起交流学习!
搭建大型分布式服务(十四)SpringBoot整合dubbo starter相关推荐
- 搭建大型分布式服务(二十二)SpringBoot 如何优雅地整合多个kafka数据源?
系列文章目录 文章目录 系列文章目录 前言 一.本文要点 二.开发环境 三.创建项目 四.修改项目 五.测试一下 六.小结 前言 在日常开发当中,经常会遇到需要消费的topic不在同一个kafka集群 ...
- 搭建大型分布式服务(二十五)如何将应用部署到TKE容器集群?
系列文章目录 文章目录 系列文章目录 前言 一.本文要点 二.开发环境 三.部署容器服务 1.制作Nginx镜像,用来打包前端web服务. 2.创建工作负载,用来运行前端web服务. 3.配置serv ...
- SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统
QUESTIONl:SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统? ANSWER: 一:创建项目模块 1.1.创建一个Empty Project 名称:Dubbo 1.2. ...
- com 组件调用不起来_Spring Cloud Alibaba,分布式服务调用(四)
1. 简介 在<Spring Cloud Alibaba 服务注册与发现>篇中曾提到,Spring Cloud Alibaba Nacos Discovery 能无缝整合 Spring C ...
- spring整合dubbo和springboot整合dubbo,实现服务暴露区别
spring整合dubbo的时候实现服务暴露是这么做的,在xml里配置 那么springboot整合dubbo的时候,是通过dubbo的@Service 注解实现的 之前我们是通过@Autowired ...
- 【SpringBoot整合Dubbo和Zookeeper】
本笔记内容为狂神说SpringBoot集成Dubbo和Zookeeper部分 目录 一.Dubbo dubbo基本概念 调用关系说明 二.Dubbo环境搭建 三.Window下安装zookeeper ...
- Springboot整合Dubbo简单示例
Springboot 整合dubbo: 1 简介 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的 ...
- springboot整合dubbo\zookeeper做注册中心
springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...
- 【SpringBoot】12.SpringBoot整合Dubbo+Zookeeper
1. 准 备 1.1 Dubbo 简介 Apache Dubbo 是一款高性能.轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用.智能容错和 负载均衡.以及服务自动注 ...
最新文章
- umi不输出html文件,部署 - UmiJS 中文文档
- 第4周小组作业:WordCount优化
- 在vue中没有数据的渲染方法
- 用matlab画大数据曲线_基于MATLAB的大数据分析
- 终止中台乱象 《2021年中国中台市场研究报告》隆重发布
- 大班体育游戏 电子计算机,【大班户外游戏】_幼儿园大班体育游戏活动设计40篇...
- linux 实现秒级定时任务
- 计算机内存的存储单位换算,电脑内存换算(电脑内存单位及换算)
- Jenkins项目配置-Nodejs项目(Vue框架)-全面
- 多端开发之uniapp开发app
- Unity实现远程开关机电脑设置(网络唤醒)
- Java学完后就业方向有哪些呢?
- 物联网专业可以插本计算机技术吗,物联网工程专业专接本考什么
- python调用usb设备_在Python中查询连接的USB设备信息的简单方法?
- 输入年月 输出日历表
- C语言康威生命游戏,【2020存档】康威生命游戏(CGoL)研究进展
- C#操作IE浏览器(打开url、获取浏览器地址栏的地址、模拟百度搜索)
- 推荐系统Python代码实现
- 美国程序员枪击案后的48小时,请放过程序员吧!
- 化工厂人员定位体系怎样保障人员及车辆安全?-新导智能
热门文章
- matlab:图像处理
- Android 自定义TabLayout
- 人工智能入门书单(附PDF链接)
- opencv计算图像亮度调节_opencv调整图像亮度对比度
- 哪款苹果无线充电宝最好?苹果无线充电宝哪个牌子好
- quadro 2000专业显卡 win7计算机体验指数5.9,英伟达全新Quadro K2200专业级显卡评测...
- 5, 10,15,20-四(4-甲氧羰基苯基)卟啉(TPPCOOMe)/5-(对亮氨酸丁氧苯基 )-10 ,15 ,20-三苯基卟啉锌配合物(Zn[Leu-TPP]齐岳定制
- 数学通道的应用(十五)-电阻的测量
- 新闻主题分类任务——torchtext 库进行文本分类
- idea远程调试springboot