本文来写个详细的例子来说下dubbo+nacos+springboot开发实战。本文不会讲述太多的理论的知识,会写一个最简单的例子来说明dubbo如何与nacos整合,快速搭建开发环境。

文章目录

  • 环境准备

    • dubbo简介

    • Nacos环境准备

    • Nacos与dubbo整合

  • 项目管理规范

  • dubbo整合nacos案例

    • 创建公共接口模块

    • 创建服务提供者模块

    • 创建服务消费者模块

    • 服务调用测试

  • 本文小结

环境准备

dubbo简介

dubbo核心节点之间的调用关系

节点说明

调用关系说明

  • 服务容器负责启动,加载,运行服务提供者。

  • 服务提供者在启动时,向注册中心注册自己提供的服务。

  • 服务消费者在启动时,向注册中心订阅自己所需的服务。

  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Nacos环境准备

启动nacos,本文使用的是nacos1.4.3版本

打开nacos的控制面板

Nacos与dubbo整合

为了方便大家理解,这里写出对应的生产方、消费方 Demo 代码,以及使用的注册中心。

项目管理规范

springboot,netflix和cloud alibaba之间有版本之间的对应关系,本文选择的版本如下

dubbo和cloud alibaba之间有版本之间的对应关系,本文选择的版本如下

为了后续方便使用SpringCloud Alibaba进行开发,首先创建一个pom类型的父项目,主要用于项目技术栈版本管理,创建一个maven项目,名称为spring-cloud-alibaba-example,去除src文件,修改pom文件

<?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>ah.wideth</groupId><artifactId>spring-cloud-alibaba-example</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version><com-alibaba-cloud.version>2.2.7.RELEASE</com-alibaba-cloud.version></properties><!--对项目版本进行管理--><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${com-alibaba-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

后续创建的项目都放到此目录下,只需要声明groupId和artifactId,会自动引用父项目spring-cloud-alibaba-example的版本。与其说是父项目,不如说是根项目: 因为下面每学习一个新的技术,就会新建一个真正的父项目,而在对应的父项目下面又会创建许多的子项目

dubbo整合nacos案例

本文的案例是在上文nacos开发实例的基础之上继续编写的。下面开始创建我们的项目,贴上我的目录结构。

模块说明

  • public-api公共接口模块(接口),供服务消费者和服务提供者调用。

  • dubbo-provider服务提供者模块(接口实现类),引入了public-api模块

  • dubbo-consumer服务消费者模块(controller),引入了public-api模块

  • 消费者和提供者通过公共接口模块进行rpc远程调用

父工程pom文件

<?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><artifactId>spring-cloud-alibaba-example</artifactId><groupId>ah.wideth</groupId><version>1.0-SNAPSHOT</version></parent><modules><module>public-api</module><module>dubbo-provider</module><module>dubbo-consumer</module></modules><artifactId>dubbo-nacos-example</artifactId><name>dubbo-nacos-example</name><description>duboo与nacos整合的父工程</description><packaging>pom</packaging><properties><java.version>1.8</java.version><project.build.sourceEncoding>utf-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><dubbo.version>2.7.13</dubbo.version><nacos.version>1.4.1</nacos.version></properties><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><!--解决nacos-client2.0报错的问题--><exclusions><exclusion><artifactId>nacos-client</artifactId><groupId>com.alibaba.nacos</groupId></exclusion></exclusions></dependency><!--dubbo相关--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>${nacos.version}</version></dependency><!-- 解决dubbo2.7.13jar包冲突问题--><dependency><groupId>com.alibaba.spring</groupId><artifactId>spring-context-support</artifactId><version>1.0.11</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion><exclusion><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId></exclusion><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion></exclusions></dependency></dependencies></project>

创建公共接口模块

pom文件

<?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><artifactId>dubbo-nacos-example</artifactId><groupId>ah.wideth</groupId><version>1.0-SNAPSHOT</version></parent><artifactId>public-api</artifactId><name>public-api</name><description>api公用接口</description><packaging>jar</packaging><properties><java.version>1.8</java.version><project.build.sourceEncoding>utf-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

公共接口模块里面只有一个接口,没有配置文件,打jar包

package ah.wideth.api;/*** 让生产者和服务消* 费者来使用这个接口*/
public interface InfoService {String getInfo();
}

创建服务提供者模块

pom文件

<?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><artifactId>dubbo-nacos-example</artifactId><groupId>ah.wideth</groupId><version>1.0-SNAPSHOT</version></parent><artifactId>dubbo-provider</artifactId><name>dubbo-provider</name><description>dubbo的服务提供者模块</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>utf-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--引入公共接口模块--><dependency><groupId>${project.groupId}</groupId><artifactId>public-api</artifactId><version>${project.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

application.yml配置文件

server:port: 8180spring:application:name: dubbo-providerdubbo:registry:address: nacos://127.0.0.1:8848 #注册地址application:name: dubbo-provider #应用名protocol:name: dubbo #dubbo协议port: 20880 #协议端口scan:base-packages: ah.wideth.impl #扫包范围provider:timeout: 30000 #超时时间

接口实现类,该类实现了上面我们在公共接口模块创建的接口

package ah.wideth.impl;import ah.wideth.api.InfoService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;// dubbo提供的Service注解,用于声明对外暴露服务
// Service引入的是org.apache.dubbo.config.annotation.Service包
@Component
@DubboService
public class InfoServiceImpl implements InfoService {@Overridepublic String getInfo() {return "hello,这里是dubbo-provider模块!";}
}

服务提供者启动类

package ah.wideth;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDubbo
@EnableDiscoveryClient
@SpringBootApplication
public class DubboProviderApplication {public static void main(String[] args) {SpringApplication.run(DubboProviderApplication.class, args);System.out.println("dubbo服务提供者8180启动了");}}

创建服务消费者模块

pom文件

<?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><artifactId>dubbo-nacos-example</artifactId><groupId>ah.wideth</groupId><version>1.0-SNAPSHOT</version></parent><artifactId>dubbo-consumer</artifactId><name>dubbo-consumer</name><description>dubbo的服务消费者模块</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>utf-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--引入公共接口模块--><dependency><groupId>${project.groupId}</groupId><artifactId>public-api</artifactId><version>${project.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

application.yml配置文件

server:port: 8181spring:application:name: dubbo-consumerdubbo:registry:address: nacos://127.0.0.1:8848 #注册地址application:name: dubbo-consumer #应用名consumer:timeout: 30000 #超时时间

controller,调用公共接口模块创建的接口

package ah.wideth.controller;import ah.wideth.api.InfoService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class InfoController {//dumbo提供的Reference注解,用于调用远程服务@DubboReference(check = false)private InfoService infoService;@GetMapping("/getInfo")public String getInfo(){return infoService.getInfo();}
}

服务消费者启动类

package ah.wideth;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDubbo
@EnableDiscoveryClient
@SpringBootApplication
public class DubboConsumerApplication {public static void main(String[] args) {SpringApplication.run(DubboConsumerApplication.class, args);System.out.println("dubbo服务消费者8181启动了");}}

服务调用测试

打开Nacos控制面板查看注册中心中的服务

启动nacos,启动服务提供者和服务消费者,调用服务消费者的getInfo方法,服务提供者会返回结果

SpringBoot+Dubbo+Nacos 开发实战教程相关推荐

  1. springboot+dubbo+nacos开发实战

    本文来写个详细的例子来说下dubbo+nacos+springboot开发实战.本文不会讲述太多的理论的知识,会写一个最简单的例子来说明dubbo如何与nacos整合.快速搭建开发环境. 文章目录 环 ...

  2. springboot+openFeign+nacos开发实战

    前面说了dubbo+nocas开发实战,现在来说下springboot+openFeign+nacos开发实战. 文章目录 什么是Feign Nacos环境准备 Nacos与openFegin整合 项 ...

  3. Swift游戏开发实战教程(大学霸内部资料)

    Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程详细讲解记忆配对 ...

  4. dubbo consumer 端口_基于Springboot+Dubbo+Nacos 注解方式实现微服务调用

    今天跟大家分享基于Springboot+Dubbo+Nacos 注解方式实现微服务调用的知识. 1 项目结构 |-- spring-boot-dubbo-demo (父级工程) |-- spring- ...

  5. vue 拖动 datatransfer 问题_electron-vue跨平台桌面应用开发实战教程(四)——窗口样式amp;打开新窗口...

    > 本文我们讲解下怎么修改窗口样式,系统默认的窗口非常普通,通常与设计不符,所以我们要自定义,接下来我们讲解下怎么去掉原有样式,怎么实现实现窗口的最小化,最大化和关闭按钮.还有怎么打开一个新页 ...

  6. 大数据开发实战教程目录

    大数据开发实战教程目录 一. 课程性质.目的和任务 本课程目的是让学生了解并掌握四个领域 (1)大数据系统的起源及系统特征 (2)大数据系统的架构设计及功能目标设计 (3)大数据系统程序开发.企业大数 ...

  7. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(3):抓取猫眼电影榜单TOP100电影,并存入Excel表格

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,如果你也要这套视频教程的话,关注我公众号[小众技术],关注后回复[PYTHON],无套路免费送你一个学习大 ...

  8. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(5):将爬虫爬取到的数据存储到TXT,Word,Excel,Json等文件中

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号[小众技术] ...

  9. 嵌入式linux驱动开发实战教程,嵌入式Linux驱动开发实战视频教程

    嵌入式Linux驱动开发实战教程(内核驱动.看门狗技术.触摸屏.视频采集系统) 适合人群:高级 课时数量:109课时 用到技术:嵌入式 Linux 涉及项目:驱动开发.看门狗技术.触摸屏.视频采集 咨 ...

最新文章

  1. springboot之@ConfigurationProperties加载配置文件
  2. 06.Spring 资源加载 - ResourceLoader
  3. python语言:烟花效果实现
  4. python程序开子进程打包成exe文件运行炸内存原因剖析
  5. Shell的 for 循环小例子
  6. 合数分解质数c语言算法,合数分解成质数之和问题探究
  7. Android studio IllegalArgumentException: couldn't make a guess
  8. linux文本编辑器字体大小,怎样将Linux中gcc文本编辑器的字体放大
  9. Tapestry中listener监听方法传递参数的方式
  10. 九针串口定义(公口、母口图解)
  11. 从学生宿舍到全球舞台: 米哈游的成长故事
  12. js-table2excel 导出带图片的excel
  13. Java中抽象类和接口的区别
  14. 基于 DolphinDB 的行情中心解决方案
  15. 基于哈夫曼编码的文件压缩解压
  16. 使用uCommand执行复杂的任务
  17. scikit-learn 机器学习:sklearn.neighbors 的k近邻算法使用
  18. Excel如何删除指定区域中重复值只保留一个
  19. 深度学习巨头—杨立昆
  20. linux服务器配置磁盘阵列,linux 磁盘阵列 raid1搭建教程

热门文章

  1. css实现loading省略号动画
  2. 图片如何压缩500k?怎样让照片小于500kb?
  3. c语言驾照考试管理系统,交管网考试系统
  4. idea如何创建类的时候加头部解释信息和如何修改类中文本注解的颜色和字体
  5. mx450和锐炬xe显卡差距 mx450和锐炬xe哪个好
  6. 聊聊gbk与utf8互转的乱码问题
  7. Ant Design项目记录和CSS3的总结和Es6的基本总结
  8. Android APP检查设备是否为平板
  9. 工作室课题第一周笔记
  10. PyCharmLearningProject学习基础