今天给各位同学带来的是Springboot+Nacos+Dubbo集成实现服务间调用,缺少Nacos相关基础的同学可先查看以前的文章
Java SpringCloud系列(六) —— Linux下Nacos单机版/集群版搭建及注意事项Java SpringCloud系列(七) —— SpringBoot2.1.X集成Nacos作为注册中心对应代码说明Java SpringCloud系列(八) —— SpringBoot2.1.X集成Nacos作为配置中心及动态修改配置中心内容对应代码说明

废话不多说,我们搭建开始。

一、搭建思路描述

简单先描述一下整体的搭建思路,首先 我们需要创建三个module,分别为dubbo-demo-consumer(消费者)、dubbo-demo-provider(生产者)、dubbo-demo-api(API调用层)。

这三个Module的关系为
1.dubbo-demo-provider(生产者)依赖dubbo-demo-api(API调用层),然后implements实现API调用层中的接口,进行实际功能编写
2.dubbo-demo-consumer(消费者)依赖dubbo-demo-api(API调用层),然后将接口类注入,并调用对应的方法。
具体关系如下图所示

srpingboot dubbo 实战 springboot dubbo nacos_rpc

以上依赖模式其实默认遵循了dubbo的很多规范,我们以后详细展开讲解。

最终的项目结构如下图所示

全局图

srpingboot dubbo 实战 springboot dubbo nacos_rpc_02


dubbo-demo-api

srpingboot dubbo 实战 springboot dubbo nacos_springboot_03


dubbo-demo-consumer

srpingboot dubbo 实战 springboot dubbo nacos_dubbo_04


dubbo-demo-provider

srpingboot dubbo 实战 springboot dubbo nacos_nacos_05

二、Dubbo集成

好了,思路我们已经梳理清晰了,接下来我们开始实际操作,关于Nacos的集成不是本文的重点,前面文章都有讲解,我们直接开始集成Dubbo。

2.1 基础多Module模块搭建

首先,我们先创建出一个多Module的SpringBoot项目,这里还是要强调一下,注意版本, 这里使用Springboot2.1.5配合dubbo2.7.3版本,搭建后的初始架构如下图

srpingboot dubbo 实战 springboot dubbo nacos_dubbo_06

2.2 dubbo-demo-api模块编写

dubbo-demo-api模块的根本目的是用来做接口定义的,我们在此模块中添加一个接口。

srpingboot dubbo 实战 springboot dubbo nacos_srpingboot dubbo 实战_07

2.2 dubbo-demo-provider模块编写

现在我们来编辑生产者,实现我们刚创建的接口的实际业务逻辑

2.1.1 添加依赖

首先我们先添加依赖

srpingboot dubbo 实战 springboot dubbo nacos_rpc_08

implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	// https://mvnrepository.com/artifact/org.apache.dubbo/dubbo
	implementation group: 'org.apache.dubbo', name: 'dubbo', version: '2.7.3'
	implementation group: 'org.apache.dubbo', name: 'dubbo-dependencies-bom', version: '2.7.3'
	implementation group: 'org.apache.dubbo', name: 'dubbo-spring-boot-starter', version: '2.7.3'
	implementation group: 'org.apache.dubbo', name: 'dubbo-registry-nacos', version: '2.7.3'
	// https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery
	implementation group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery', version: '2.1.2.RELEASE'
	compile project(":dubbo-demo-api")
2.1.2 编写配置文件

然后,我们进行配置文件编写,对应配置说明都在代码注释中

srpingboot dubbo 实战 springboot dubbo nacos_srpingboot dubbo 实战_09

#=================================基础配置========================================================
server:
  port: 5730
spring:
  application:
    name: beyondli-cloud-dubbo-provider
  cloud:
    nacos:
      discovery:
        server-addr: ip:port
dubbo:
  #dubbo名称 与spring.application.name一致
  application:
    id: beyondli-cloud-dubbo-provider
  #nacos地址
  registry:
    address: nacos://ip:port
  #协议相关配置
  protocol:
    name: dubbo
    port: 20881
  #所需扫描的包
  scan:
    base-packages: com.beyondli.*
2.1.3 代码编写

首先,开关处添加相关注解
@EnableDiscoveryClient
@EnableDubbo

srpingboot dubbo 实战 springboot dubbo nacos_dubbo_10

之后,编写Service层相关代码

srpingboot dubbo 实战 springboot dubbo nacos_rpc_11

2.2 dubbo-demo-provider模块编写
2.2.1 添加依赖

与2.1.1一致 不做过多解释

srpingboot dubbo 实战 springboot dubbo nacos_springboot_12

2.2.2 编写配置文件

srpingboot dubbo 实战 springboot dubbo nacos_springboot_13

#=================================基础配置========================================================
server:
  port: 5731
spring:
  application:
    name: beyondli-cloud-dubbo-consumer
  cloud:
    nacos:
      discovery:
        server-addr: ip:port
dubbo:
  #dubbo名称 与spring.application.name一致
  application:
    id: beyondli-cloud-dubbo-consumer
  registry:
    address: nacos://ip:port
  #无需生产者是否存在限制
  consumer:
    check: false
2.2.3 代码编写

首先,开关添加@EnableDiscoveryClient注解

srpingboot dubbo 实战 springboot dubbo nacos_dubbo_14

之后,编写controller,调用所需接口,我们通过@Reference注解进行接口注入

srpingboot dubbo 实战 springboot dubbo nacos_springboot_15

三、项目启动测试

好了 现在我们启动dubbo-demo-provider和dubbo-demo-consumer两个项目,之后到我们的Nacos中查看我们的服务,会看到如下内容

srpingboot dubbo 实战 springboot dubbo nacos_dubbo_16

现在,我们进行接口测试。
http://localhost:5731/dubbo/get/info?name=beyondLi71 大功告成

srpingboot dubbo 实战 springboot dubbo nacos_srpingboot dubbo 实战_17