dubbo:dubbo整合nacos实现服务注册中心、配置中心(二)

news2024/9/19 22:17:49

文章目录

  • 0. 引言
  • 1. nacos简介及安装
  • 2. 注册中心实现
  • 3. 配置中心实现
  • 4. 源码
  • 5. 总结

0. 引言

之前我们讲解的是dubbo+zookeeper体系来实现微服务框架,但相对zookeeper很多企业在使用nacos, 并且nacos和dubbo都是阿里出品,所以具备一些天生的契合性,所以今天我们来讲解dubbo如何整合nacos实现服务注册、配置

首先如果对于dubbo完全没有概念的同学,可以先学习下之前的文章再继续观看本文:
从零理解及搭建dubbo微服务框架(一)

1. nacos简介及安装

之前文章中已经介绍过nacos, 这里不再累述,大家可以参考文章:
springcloud:注册中心、配置中心组件nacos详解

2. 注册中心实现

1、我们先创建两个springboot项目user-serverorder-server,将作为user-server作为dubbo服务的提供者,order-server作为消费者,通过dubbo调用user-server的接口服务

2、在user-server项目中,引入依赖

 		<dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.7.RELEASE</version>
        </dependency>

		 <!--集成Nacos实现服务注册与发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.0.3</version>
        </dependency>

注意这里要单独引入下nacos-client的依赖,其版本与你安装的nacos版本保持一致,否则会导致各种NoClassDefFoundError错误,或者你也可以提高spring-cloud-starter-alibaba-nacos-discoveryspring-cloud-starter-alibaba-nacos-config对应的版本,让其中包含的nacos-client接近你安装的版本

3、修改配置文件application.yml

# 应用服务 WEB 访问端口
server:
  port: 8081

spring:
  application:
    name: user-server-nacos

dubbo:
  application:
    name: ${spring.application.name}
  protocol: # 指定通信规则
    name: dubbo # 通信协议
    port: -1 # dubbo协议端口,以供消费者访问,-1即为随机端口
  registry: # 注册中心
    id: nacos-registry
    address: nacos://localhost:8848

4、为了让我们的接口能被order-server更好的调用,我们先创建一个server-api模块,用于声明提供者的接口服务:
(1)创建一个maven空项目
(2)创建一个UserService接口,用于声明user-server提供者接口
(3)在user-server中添加该模块的pom依赖

		<dependency>
            <groupId>wu.example</groupId>
            <artifactId>service-api</artifactId>
            <version>${parent.version}</version>
        </dependency>

5、在user-server中创建UserServiceImpl类,用于书写具体的提供服务,注意该类用@DubboService注解标注为dubbo服务类,并且声明UserService

@DubboService
public class UserServiceImpl implements UserService {

    @Override
    public String getUserById(Integer id){
        return "nacos用户" + id;
    }

}

6、因为user-server是提供者,所以其启动类上要额外添加@EnableDubbo注解

7、提供者的操作就处理完成了,我们将其启动,如果发现启动报错,可以根据报错信息具体排查

8、在order-server项目中,引入依赖,需要注意order-server也引入了service-api模块

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>wu.example</groupId>
            <artifactId>service-api</artifactId>
            <version>${parent.version}</version>
        </dependency>

        <!-- dubbo client dependencies -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>

        <!--集成Nacos实现服务注册与发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.0.3</version>
        </dependency>

9、修改order-server配置文件

# 应用服务 WEB 访问端口
server:
  port: 8082

spring:
  application:
    name: order-server-nacos

dubbo:
  application:
    name: ${spring.application.name}
  protocol: # 指定通信规则
    name: dubbo # 通信协议
    port: -1 # dubbo协议端口,以供消费者访问,-1即为随机端口
  registry: # 注册中心
    id: nacos-registry
    address: nacos://localhost:8848

9、在order-server中创建OrderController类,用于模拟调用user-server,注意引入dubbo提供者服务需要用@DubboReference注解

@RestController
public class OrderController {

    @DubboReference
    private UserService userService;

    @GetMapping("createOrder")
    public String createOrder(Integer id){
        String userName = userService.getUserById(id);
        return userName + " createOrder success";
    }
}

10、启动order-server, 一定要先启动服务提供者user-server,再启动消费者order-server

11、观察nacos管理界面,可以看到user-server和order-server,以及具体的提供者服务UserService即说明启动正常

12、我们调用下orderController的接口,来验证下

在这里插入图片描述
如上图,可以看到order-server的服务正常调用到user-server提供的服务了,说明dubbo通信正常,我们的搭建即成功了

3. 配置中心实现

1、在dubbo项目中接入nacos实现配置中心实际上和springcloud是一样的,可参考
springcloud:注册中心、配置中心组件nacos详解

2、这里我们在order-server项目中简单示意下,引入config依赖

    <!--集成Nacos实现动态配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>

添加配置文件bootstrap.yaml,注意不要在application.yml中添加配置:

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        # 命名空间ID,默认为public命名空间,省略不写,命名空间ID在nacos-命名空间页面可以看到
        namespace:
        username: nacos
        password: nacos
        # 文件名 如果没有配置则默认为服务名,即spring.appliction.name
        prefix: order-server-nacos
        #指定文件后缀,默认properties
        file-extension: yaml

3、在nacos配置管理中新建对应的配置文件,注意其命名格式为${prefix}-${spring.profile-active}.${file-extension}
在这里插入图片描述

4、在接口中直接引用该配置项

    @Value("${user.age}")
    private Integer userAge;
    @Value("${user.name}")
    private String userName;

    @GetMapping("getUser")
    public String getUser(){
        return "用户信息为:name="+userName+",age="+userAge;
    }

5、调用测试,可以看到nacos上的配置项成果拿到了
在这里插入图片描述
6、更多关于nacos配置中心的使用,大家可以参考上述列举的文章

4. 源码

文中源码,可在https://gitee.com/wuhanxue/dubbo_wu_demo下载

5. 总结

本章节中我们讲解了dubbo集成nacos实现注册中心、配置中心的操作,后续我们将继续讲解dubbo框架集成网关的多种方案,大家有兴趣可关注专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑神话:悟空四年前就布局商标,多个名称申请全类!

近日黑神话&#xff1a;悟空上线&#xff0c;预售超4亿元&#xff0c;普推知产商标老杨经检索发现&#xff0c;背后的主体游科互动早在三年前就布局商标&#xff0c;申请了多个核心名称的45类全类的商标。 背后的游科互动名下申请了245件商标&#xff0c;其“黑悟空”是2021年申…

如何通过观测云实现AIOps突破?

在当今信息技术迅猛发展的浪潮中&#xff0c;企业正置身于一个日益复杂化的 IT 环境&#xff0c;并面临着数据量的爆炸性增长。智能运维&#xff08;AIOps&#xff09;&#xff0c;作为 IT 运维管理领域的革新者&#xff0c;融合了大数据和机器学习技术&#xff0c;致力于对 IT…

全场景——(四)Modbus 通讯协议

文章目录 一、学习Modbus的快速方法1.1 寄存器速记1.2 协议速记 二、初识Modbus2.1 背景2.2 什么是Modbus&#xff1f;2.2.1 Modbus简介2.2.2 Modbus特点2.2.3 Modbus常用术语2.2.4 Modbus事务处理 三、Modbus软件与使用3.1 Modbus软件简介3.2 Modbus Poll&#xff08;主站设备…

鸿蒙HarmonyOS之使用ArkTs语言实现层级树状目录选择UI

一、实现效果 二、实现步骤 代码示例中用到的颜色、图片等资源可以自行替换设置 1、Index.ets 里面调用 import { CategoryView} from ./CategoryView;//主页面 Entry Component struct Index {State tabsIndex: number 0;build() {...//层级目录ViewCategoryView()...} …

AMD和NVIDIA一起挤牙膏,新显卡性能反而降低

红厂 AMD 因为新品锐龙 9000 CPU&#xff0c;在这两天算是赚足了眼球和关注度。 在两周的延迟后&#xff0c;高端 R9 系列终于是端上来了&#xff0c;R9-9900X 和 R9-9950X&#xff0c;核心规模和最高加速频率与上代保持不变&#xff0c;基础频率略有降低。 国行售价分别为 339…

FFmpeg的入门实践系列一

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力! 江山如画&#xff0c;客心如若&#xff0c;欢迎到访&#xff0c;一展风采 文章目录 参考环境本系列的适用人群FFmpeg的简介FFmpeg…

【等保测评】Ngnix模拟测评

一、身份鉴别 a)应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换&#xff1b; 结果记录&#xff1a;此项不适用&#xff0c;Nginx无独立的登录管理界面&#xff0c;身份鉴别由操作系统层面实现 b)应具有登…

基于linux下的mplayer播放器项目

项目名称&#xff1a;基于MPlayer的C语言控制接口 版本&#xff1a;1.0 1. 项目概述 本项目旨在设计一个基于MPlayer的简单C语言控制接口&#xff0c;提供用户与媒体播放器的交互功能。用户可以通过文本菜单选择不同的操作&#xff0c;如播放、暂停、停止、调整播放速度、跳…

MySql 高阶二(SQL 性能分析)

SQL 性能分析&#xff1a; 查看当前数据库的 增删改查的使用情况 show global status like Com_______;慢查询日志&#xff1a; -- 查看状态 show variables like slow_query_log目前是开启状态。如何开启&#xff0c;编辑my.cnf 文件 添加下面的语句&#xff0c;编辑完成后…

【卡码网C++基础课 1.A+B问题1】

文章目录 题目描述与分析一、C函数基础二、输入输出流三、变量四、写入数据五、输出数据六、尝试第一次提交七、循环输入输出八、延伸 题目描述与分析 题目描述&#xff1a; 你的任务是计算ab。 输入描述&#xff1a; 输入包含一系列的a和b对&#xff0c;通过空格隔开。一对a…

《内生性随机边界模型及 Stata 具体操作步骤》

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 一、文献综述 自 Aigner 等&#xff08;1977&#xff09;、Meeusen 和 van den Broeck&#xff08;1977&#xff09;引入随机前沿模型以来&#xff0c;该模型已有 40 多年的历史。它由确定…

【Qt】Qt窗口 | QStatusBar 状态栏

文章目录 一. 状态栏二. 代码创建&使用状态栏1. 创建状态栏2. 在状态栏中显示实时消息3. 在状态栏中显示控件 一. 状态栏 状态栏是应用程序中输出简要信息的区域&#xff0c;通常位于窗口的底部&#xff0c;用于显示应用程序的状态信息或提供用户与应用程序交互的反馈。一…

qt的model view 使用示范

首先在ui界面拖一个tableView ui->tableView->setModel(mission_model); 然后设置model的qss&#xff0c;并用view绑定model void SettingWidget::init_missionmodel(QString plane_type, QString mission_name) {if(mission_model)delete mission_model;mission_model…

《智能计算系统:从深度学习到大模型(第2版)》重磅上市!

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

PINCE——Linux 原生游戏内存修改器,一款替代 Cheat Engine 的强大游戏修改器,Linux 游戏玩家必备神器!

PINCE——Linux 原生游戏内存修改器&#xff0c;一款替代 Cheat Engine 的强大游戏修改器&#xff0c;Linux 游戏玩家必备神器&#xff01; PINCE 是 GNU Project Debugger(GDB) 的前端/反向工程工具&#xff0c;常用作程序调试器&#xff0c;主要用于游戏领域&#xff0c;修改…

docker容器图形化管理之Portainer

docker容器轻量级图形页面管理之Portainer 1、查看portainer镜像 [rootlocalhost ~]# docker search portainer 2、下载portainer镜像 [rootlocalhost ~]# docker pull portainer/portainer #选择喜欢的portainer风格镜像下载 3、启动dockerui容器 [rootlocalhost ~]# doc…

京东物流开放平台对接云打印功能

这是京东开发文档的流程图&#xff0c;根据自己的需求分析&#xff0c;我选择的是接入方式一 这是接入方式一的流程图: 所有第一步我们先下载他的打印组件并安装&#xff1a;京东物流开放平台 第二步呢就是看你有没有自定义快递面单的需求&#xff0c;由于目前我没有特别的需…

录屏选区指南,优选3款支持区域录制的录屏软件!

在数字内容创作和分享的时代&#xff0c;录屏软件成为了游戏玩家、教育工作者和视频博主的重要工具。无论是想要捕捉精彩的游戏瞬间&#xff0c;还是制作教学视频&#xff0c;选择正确的录屏区域都是确保内容质量和观众体验的关键。然而&#xff0c;面对市面上众多的录屏软件&a…

HDFS回收站-删除策略详解

HDFS拥有回收站的功能,将某一段时间的删除的数据,放到指定路径(/user/{username}/.Trash),至少保留指定的时间,然后一起删除。 现实中发现回收站里有该删除的却没有删除,和回收站原理逻辑对不上。 以下从源码上看看到底是什么原因导致的。 背景 某HDFS集群指定数据保留…

Docusign Maestro:智能自动化,实现无缝协作,让签约更简单!

作为 Docusign IAM 引擎的核心部分&#xff0c;Maestro 能够帮助你自动化、定制并连接你的协议工作流程。你可以完全按照自己的需求&#xff0c;定制每一个流程细节。无论是什么类型的协议&#xff0c;Maestro 都能减少繁琐的手动操作&#xff0c;让最终用户更快、更轻松地完成…