一、本文要点

接上文,我们已经把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相关推荐

  1. 搭建大型分布式服务(二十二)SpringBoot 如何优雅地整合多个kafka数据源?

    系列文章目录 文章目录 系列文章目录 前言 一.本文要点 二.开发环境 三.创建项目 四.修改项目 五.测试一下 六.小结 前言 在日常开发当中,经常会遇到需要消费的topic不在同一个kafka集群 ...

  2. 搭建大型分布式服务(二十五)如何将应用部署到TKE容器集群?

    系列文章目录 文章目录 系列文章目录 前言 一.本文要点 二.开发环境 三.部署容器服务 1.制作Nginx镜像,用来打包前端web服务. 2.创建工作负载,用来运行前端web服务. 3.配置serv ...

  3. SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统

    QUESTIONl:SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统? ANSWER: 一:创建项目模块 1.1.创建一个Empty Project 名称:Dubbo 1.2. ...

  4. com 组件调用不起来_Spring Cloud Alibaba,分布式服务调用(四)

    1. 简介 在<Spring Cloud Alibaba 服务注册与发现>篇中曾提到,Spring Cloud Alibaba Nacos Discovery 能无缝整合 Spring C ...

  5. spring整合dubbo和springboot整合dubbo,实现服务暴露区别

    spring整合dubbo的时候实现服务暴露是这么做的,在xml里配置 那么springboot整合dubbo的时候,是通过dubbo的@Service 注解实现的 之前我们是通过@Autowired ...

  6. 【SpringBoot整合Dubbo和Zookeeper】

    本笔记内容为狂神说SpringBoot集成Dubbo和Zookeeper部分 目录 一.Dubbo dubbo基本概念 调用关系说明 二.Dubbo环境搭建 三.Window下安装zookeeper ...

  7. Springboot整合Dubbo简单示例

    Springboot 整合dubbo: 1 简介 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的 ...

  8. springboot整合dubbo\zookeeper做注册中心

    springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...

  9. 【SpringBoot】12.SpringBoot整合Dubbo+Zookeeper

    1. 准 备 1.1 Dubbo 简介 Apache Dubbo 是一款高性能.轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用.智能容错和 负载均衡.以及服务自动注 ...

最新文章

  1. umi不输出html文件,部署 - UmiJS 中文文档
  2. 第4周小组作业:WordCount优化
  3. 在vue中没有数据的渲染方法
  4. 用matlab画大数据曲线_基于MATLAB的大数据分析
  5. 终止中台乱象 《2021年中国中台市场研究报告》隆重发布
  6. 大班体育游戏 电子计算机,【大班户外游戏】_幼儿园大班体育游戏活动设计40篇...
  7. linux 实现秒级定时任务
  8. 计算机内存的存储单位换算,电脑内存换算(电脑内存单位及换算)
  9. Jenkins项目配置-Nodejs项目(Vue框架)-全面
  10. 多端开发之uniapp开发app
  11. Unity实现远程开关机电脑设置(网络唤醒)
  12. Java学完后就业方向有哪些呢?
  13. 物联网专业可以插本计算机技术吗,物联网工程专业专接本考什么
  14. python调用usb设备_在Python中查询连接的USB设备信息的简单方法?
  15. 输入年月 输出日历表
  16. C语言康威生命游戏,【2020存档】康威生命游戏(CGoL)研究进展
  17. C#操作IE浏览器(打开url、获取浏览器地址栏的地址、模拟百度搜索)
  18. 推荐系统Python代码实现
  19. 美国程序员枪击案后的48小时,请放过程序员吧!
  20. 化工厂人员定位体系怎样保障人员及车辆安全?-新导智能

热门文章

  1. matlab:图像处理
  2. Android 自定义TabLayout
  3. 人工智能入门书单(附PDF链接)
  4. opencv计算图像亮度调节_opencv调整图像亮度对比度
  5. 哪款苹果无线充电宝最好?苹果无线充电宝哪个牌子好
  6. quadro 2000专业显卡 win7计算机体验指数5.9,英伟达全新Quadro K2200专业级显卡评测...
  7. 5, 10,15,20-四(4-甲氧羰基苯基)卟啉(TPPCOOMe)/5-(对亮氨酸丁氧苯基 )-10 ,15 ,20-三苯基卟啉锌配合物(Zn[Leu-TPP]齐岳定制
  8. 数学通道的应用(十五)-电阻的测量
  9. 新闻主题分类任务——torchtext 库进行文本分类
  10. idea远程调试springboot