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

文章目录

  • [0. 引言](#0. 引言)
  • [1. nacos简介及安装](#1. nacos简介及安装)
  • [2. 注册中心实现](#2. 注册中心实现)
  • [3. 配置中心实现](#3. 配置中心实现)
  • [4. 源码](#4. 源码)
  • [5. 总结](#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项目中,引入依赖

xml 复制代码
 		<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

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依赖

xml 复制代码
		<dependency>
            <groupId>wu.example</groupId>
            <artifactId>service-api</artifactId>
            <version>${parent.version}</version>
        </dependency>

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

java 复制代码
@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模块

xml 复制代码
<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配置文件

yml 复制代码
# 应用服务 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注解

java 复制代码
@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依赖

xml 复制代码
    <!--集成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中添加配置:

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、在接口中直接引用该配置项

java 复制代码
    @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框架集成网关的多种方案,大家有兴趣可关注专栏

相关推荐
AI大模型训练家4 天前
OpenAI的API调用之初探,python调用GPT-API(交互式,支持多轮对话)
人工智能·python·gpt·学习·程序人生·dubbo·agi
DEARM LINER5 天前
dubbo 服务消费原理分析之应用级服务发现
spring boot·架构·服务发现·dubbo·safari
CopyLower6 天前
Dubbo 与 Zookeeper 在项目中的应用:原理与实现详解
分布式·zookeeper·dubbo
Flying_Fish_roe10 天前
Dubbo 安全方面措施
安全·dubbo
Flying_Fish_roe11 天前
Dubbo缓存
spring·缓存·dubbo
百度智能云11 天前
基于AppBuilder自定义组件开发大模型应用
dubbo
小爷汤少17 天前
参数校验学习笔记
spring boot·dubbo·参数校验
iRayCheung19 天前
Jenkins docker容器时区修改
docker·jenkins·dubbo
红烧柯基19 天前
MacOS通过Docker部署安装zookeeper、dubbo-admin,以及Docker Desktop进行管理
docker·zookeeper·dubbo
Jack bocket20 天前
使用Jmeter压测dubbo接口(不依赖dubbo插件)
jmeter·dubbo·压力测试