SpringBoot2.0完美整合Dubbo

Easter79
• 阅读 348

2019已经到了,希望我跟大家一样有一个新的开始,18年有再多的烦恼和不堪,那只是过去,接下来走好脚下的路就行了。

SpringBoot2.0完美整合Dubbo

现在微服务越来越普遍,基本现在的新项目基本都是采用微服务的方式,这里我们暂不讨论微服务的好处什么的,我们常见的微服务架构就是SpirngCloud,它整合了各种组件,让我们的开发确实变得非常的方便,除了SpringCloud之外,其实还有另外的一种架构风格,SpringBoot + Dubbo,那么我们今天就来说一下,SpringBoot如何集成Dubbo做微服务架构。

SpringBoot2.0完美整合Dubbo

项目结构

我们想要开发一个完善的微服务架构,那么做好各模块之间的依赖关系是至为重要的,那么我们先来看下我们的项目结构。

SpringBoot2.0完美整合Dubbo

我们构建这个项目其实主要是模拟这样一个流程,在订单模块去调用会员模块的接口。这里我就不说如何去安装zookeeper和Dubbo了,这个东西一百度一大把,如果实在有问题的话,底部留言吧,我看到会回复的。(建议大家尽量在Linux环境下去安装)

SpringBoot2.0完美整合Dubbo

构建项目

接下来我们首先构建我们的父项目(springboot2.0-dubbo-parent),看需要引入哪些maven坐标。以下就是我们SpringBoot2.0整合Dubbo所需要的一些maven坐标,这里我并没有将整个pom文件放上来,主要太长,看着不方便,我已经把这个上传到了github上,下文有地址,可以点进去看。

 <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>2.0.1.RELEASE</version>  </parent>  <!-- 编写统一的版本控制 -->  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <maven.compiler.source>1.8</maven.compiler.source>    <maven.compiler.target>1.8</maven.compiler.target>    <java-version>1.8</java-version>    <curator-framework>4.0.1</curator-framework>    <zookeeper.version>3.4.13</zookeeper.version>    <dubbo.starter.version>0.2.0</dubbo.starter.version>  </properties>  <dependencies>    <!-- SpringBoot 整合 Web组件 -->    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>      <groupId>com.alibaba.boot</groupId>      <artifactId>dubbo-spring-boot-starter</artifactId>      <version>${dubbo.starter.version}</version>    </dependency>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.11</version>      <scope>test</scope>    </dependency>  </dependencies>

接下来就是构建我们接口管理模块(springboot2.0-dubbo-public-api-service),所有模块的接口定义必须放在该模块下,这个模块中没有什么特别的maven坐标需要引入。

再下来构建会员接口模块(springboot2.0-dubbo-public-api-member-service),该模块是接口管理模块的子模块,这个模块中也没有什么需要特别需要引入的maven坐标。

然后我们就是来创建会员模块的实现模块(springboot2.0-dubbo-public-api-member-service-impl)了,这个模块是父项目下的一个模块,并不是存在于接口管理模块下的,不清楚可以看看上面的项目结构图。这个模块中需要引入一个maven坐标,因为他要去实现会员模块定义的接口,那么就必须把会员模块引入进来。

<dependency>    <groupId>com.xiaotao</groupId>    <artifactId>springboot2.0-dubbo-public-api-member-service</artifactId>    <version>1.0-SNAPSHOT</version></dependency>

最后我们再来构建订单模块的表现层(springboot2.0-dubbo-order-web),这个模块中也是引入一个maven就好,因为它要去调用会员模块的接口,所以我们将会员模块的maven引入进来。

<dependency>    <groupId>com.xiaotao</groupId>    <artifactId>springboot2.0-dubbo-public-api-member-service</artifactId>    <version>1.0-SNAPSHOT</version></dependency>

SpringBoot2.0完美整合Dubbo

项目完善

到这里我们整个模块算是创建完了,我们剩下的就是去完善我们的项目。订单模块要调用会员模块的接口,那么我们首先应该在会员的接口模块创建一个接口。

public interface IMemberService {    // 会员接口    String getUser();}

会员接口的实现模块实现该接口

@Servicepublic class MemberServiceImpl implements IMemberService {    @Override    public String getUser() {        System.out.println("订单服务调用会员服务");        return "订单服务调用会员服务";    }}

注意:我们之前采用@Service是将我们的服务注册到容器中,但是我们现在使用的是Dubbo那么我们是将我们的服务注册到Dubbo中,所以大家这里导包的时候一定要注意。

SpringBoot2.0完美整合Dubbo

这个模块是要启动起来的,所以我们还要写我们的启动类

@EnableDubbo@SpringBootApplicationpublic class AppMember {    public static void main(String[] args) {        SpringApplication.run(AppMember.class, args);    }}

注意:@EnableDubbo这个注解是开启Dubbo服务的,如果不加该注解,那么该服务是注册不到Dubbo中去的。

最后我们需要配置我们的dubbo,我们的dubbo将服务注册到哪里这些我们还没有进行配置,我们在springboot的resources下的application.yml中进行配置,具体配置如下

server:  port: 9002dubbo:  application:  ###########注册到注册中心的名称############    name: member  ###########采用协议和端口号################  protocol:  ###########采用dubbo协议####################    name: dubbo  ###########发布dubbo端口号为20880###########    port: 20881  registry:  ###########注册中心地址#####################    address: zookeeper://192.168.50.128:2181spring:  output:    ansi:      enabled: always

到这里我们订单这个模块就算搞定了,将会员实现这个模块启动起来,然后访问Dubbo地址(http://192.168.50.128:8080/dubbo-admin-2.6.0/),这里是我的地址,你要访问你的地址。

我们通过控制台可以看到Dubbo服务已经注册进去了。

SpringBoot2.0完美整合Dubbo

我们再来看看Dubbo控制面板,可以看到这个服务的确已经注册进来了。

SpringBoot2.0完美整合Dubbo

最后我们来说下,我们如果在订单模块去进行调用。首先我们在订单模块写一个接口去调用我们会员模块的接口。

@RestControllerpublic class OrderController {    @Reference    private IMemberService memberService;    @GetMapping("/orderToMember")    public String orderToMember() {        String user = memberService.getUser();        System.out.println(user);        return user;    }}

注意:@Reference 这个注解其实跟我们之前使用的@Autowired其实是一样的意思,但是我们之前将服务注册到了Dubbo中,所以我们需要从Dubbo中去取这个服务,所以就必须使用这个注解。

启动类

@SpringBootApplication@EnableDubbopublic class AppOrder {    public static void main(String[] args) {        SpringApplication.run(AppOrder.class, args);    }}

最后一步在配置下application.yml

server:  port: 8001dubbo:  application:  ##### 注册服务的名称    name: order  ##### 注册中心地址  registry:    address: zookeeper://192.168.50.128:2181  ##### 调用服务超时时间  consumer:    timeout: 5000spring:  output:    ansi:      enabled: always

到这里我们整个项目就写完了,那么最后我们启动订单模块,看看是否调用成功。

SpringBoot2.0完美整合Dubbo

最后通过测试我们可以发现,是没有问题的。我们再看看Dubbo的控制面板是否有消费者。

SpringBoot2.0完美整合Dubbo

最后发现确实是有一个消费者的。

到这里我们SpringBoot2.0整合Dubbo就已经完成了。

项目地址:https://github.com/liangbintao/springboot2.0-dubbo

原创不易,给小涛点个底部的好看吧!

更多内容请关注“一个程序员的成长

SpringBoot2.0完美整合Dubbo

本文分享自微信公众号 - 一个程序员的成长(xiaozaibuluo)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
2年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
2年前
KaliTools说明书+BurpSuit实战指南+SQL注入知识库+国外渗透报告
!(https://oscimg.oschina.net/oscnet/d1c876a571bb41a7942dd9752f68632e.gif"15254461546.gif")0X00KaliLinux Tools中文说明书!(https://oscimg.oschina.net/oscnet/
Stella981 Stella981
2年前
SpringBoot2.0完美整合Dubbo
2019已经到了,希望我跟大家一样有一个新的开始,18年有再多的烦恼和不堪,那只是过去,接下来走好脚下的路就行了。!(https://oscimg.oschina.net/oscnet/2942383aff48ed0f0d0f3c72c1bb1d1cf90.png)现在微服务越来越普遍,基本现在的新项目基本都是采用微服务的方式,这
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k