Java+SpringBoot+Dubbo+Nacos快速入门

目录

一、Dubbo基本介绍。

二、Dubbo快速入门。

(1)环境准备与了解。

(2)项目与模块搭建。

[1、父 POM 工程。(dubbo-parent)](#1、父 POM 工程。(dubbo-parent))

[2、API 模块-接口、实体类。(dubbo-client-simple)](#2、API 模块-接口、实体类。(dubbo-client-simple))

3、服务提供方模块。(dubbo-server-simple)

[4、Web 消费方模块。(dubbo-site-simple)](#4、Web 消费方模块。(dubbo-site-simple))

三、测试。

(1)debug启动服务,查看运行情况。

(2)访问nacos本地控制台地址。

(3)测试controller。(验证服务的远程调用/消费)


一、Dubbo基本介绍。

  • Dubbo是最初阿里为解决自身微服务架构问题而设计和开发的。它是基于Java 语言的高性能、轻量级的 RPC 框架。
  • 主要提供:远程服务调用、服务治理、服务监控、服务容错、服务负载均衡等。
  • 官方网址:https://cn.dubbo.apache.org/zh-cn/

  • Dubbo架构基本思想。
  • Dubbo生产者(服务提供者)启动并暴露服务registration。
  • Dubbo消费者从服务注册与发现中心订阅subscribe。

二、Dubbo快速入门。

(1)环境准备与了解。
  • nacos-server-2.4.1。(dubbo3.3.0兼容nacos2.x)
  • nacos-client。(dubbo-nacos-spring-boot-starter中已引入)
  • 对于Spring Boot 应用。(dubbo官方推荐)
XML 复制代码
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-bom</artifactId>
    <version>3.3.0</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
XML 复制代码
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>3.3.0</version>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-nacos-spring-boot-starter</artifactId>
    <version>3.3.0</version>
</dependency>
  • 我这里采用统一使用父工程管理依赖的版本
  • 1、<artifactId>spring-boot-dependencies</artifactId>:是 springboot官方定义的规范artifact,预定义了 Spring Boot 相关组件(各种核心依赖)的版本号,以及这些依赖之间的兼容关系。
  • 2、<artifactId>dubbo-bom</artifactId>:是 Apache Dubbo 官方提供的 "依赖管理聚合 POM",作用与spring-boot-dependencies类似,核心是 "统一管理 Dubbo 生态中所有组件的版本"。

  • 配合使用<scope>import</scope>。仅在<dependencyManagement>中有效。用于 "导入外部 POM 的依赖管理规则"。(不会实际引入依赖,只管理版本)
  • 配合使用<type>pom</type>。它是 Maven 中标识 "配置型依赖" 的关键声明,主要用于依赖版本管理、配置继承和多模块聚合。(jar:默认类型,表示依赖是一个 Java 归档文件,war:表示依赖是一个 Web 应用归档文件)

(2)项目与模块搭建。
  • 整体项目结构图。
1、父 POM 工程。(dubbo-parent)
XML 复制代码
<?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>com.hyl</groupId>
    <artifactId>dubbo-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging> <!--特别注意-->
    <modules>
        <module>CLIENT/dubbo-client-simple</module>
        <module>SERVER/dubbo-server-simple</module>
        <module>SITE/dubbo-site-simple</module>
    </modules>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <dubbo.version>3.3.0</dubbo.version>
        <spring-boot.version>3.5.6</spring-boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>
  • 一共分子目录CLIENT、SERVER、SITE。分别对应子模块dubbo-client-simple、dubbo-server-simple、dubbo-site-simple。
2、API 模块-接口、实体类。(dubbo-client-simple)
  • pom文件。
XML 复制代码
<?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>
    <parent>
        <groupId>com.hyl</groupId>
        <artifactId>dubbo-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>dubbo-client-simple</artifactId>
    <packaging>jar</packaging> <!--显式打包jar供其他服务依赖-->

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

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

</project>
  • 提供一个测试接口DemoService。
java 复制代码
package com.hyl.client.simple;

import com.hyl.client.simple.bean.User;

public interface DemoService {
    String sayHello(String name);
    User getUser(Long uid);
}
  • 提供一个实体类User。
java 复制代码
package com.hyl.client.simple.bean;

import java.io.Serial;
import java.io.Serializable;

public class User implements Serializable {
    //编译时检查字段否符合序列化规范
    @Serial
    private static final long serialVersionUID = 1L;
    private Long uid;
    private String name;

    public Long getUid() {
        return uid;
    }

    public void setUid(Long uid) {
        this.uid = uid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", name='" + name + '\'' +
                '}';
    }
}

3、服务提供方模块。(dubbo-server-simple)
  • pom文件。
XML 复制代码
<?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>
    <parent>
        <groupId>com.hyl</groupId>
        <artifactId>dubbo-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>dubbo-server-simple</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.hyl</groupId>
            <artifactId>dubbo-client-simple</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-nacos-spring-boot-starter</artifactId>
        </dependency>
        <!--<dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>-->
    </dependencies>

</project>
  • 提供一个测试接口实现类DemoServiceImpl。
java 复制代码
package com.hyl.server.simple.service;

import com.hyl.client.simple.DemoService;
import com.hyl.client.simple.bean.User;
import org.apache.dubbo.config.annotation.DubboService;

//暴露服务
@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return "Hello "+ name;
    }

    @Override
    public User getUser(Long uid) {
        User newUser = new User();
        newUser.setUid(uid);
        newUser.setName("用户"+uid);
        return newUser;
    }
}
  • 启动类DubboServerApplication。(开启Dubbo扫描)
java 复制代码
package com.hyl.server.simple;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo  //启用Dubbo注解扫描
public class DubboServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboServerApplication.class, args);
    }
}
  • 提供application.yml配置文件。(spring、dubbo服务方基础配置)
XML 复制代码
spring:
  application:
    name: dubbo-server-simple

dubbo:
  application:
    name: dubbo-server-simple
    logger: slf4j
    qos-port: 22226
  registry:
    address: nacos://127.0.0.1:8848
  protocol:
    name: tri
    port: 50051  #服务提供者
    heartbeat: 15000  #心跳检测间隔
  provider:
    timeout: 15000  #服务提供方超时时间
    retries: 0  #重试次数

4、Web 消费方模块。(dubbo-site-simple)
  • pom文件。
XML 复制代码
<?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>
    <parent>
        <groupId>com.hyl</groupId>
        <artifactId>dubbo-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>dubbo-site-simple</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.hyl</groupId>
            <artifactId>dubbo-client-simple</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-nacos-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

</project>
  • 提供一个测试controller类DemoSiteController。
java 复制代码
package com.hyl.site.simple.controller;

import com.hyl.client.simple.DemoService;
import com.hyl.client.simple.bean.User;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class DemoSiteController {

    @DubboReference(check = false)  //启动时不检查服务是否可用
    private DemoService demoService;

    //Spring 6.x 不再推测参数名,必须显式指定 value 或启用 -parameters
    //必须使用value显示的指定参数名称
    @RequestMapping("/hello")
    public String hello(@RequestParam(value = "name") String name) {
        return demoService.sayHello(name);
    }

    @RequestMapping("/user/{uid}")
    public User getUser(@PathVariable(value = "uid") Long uid) {
        return demoService.getUser(uid);
    }
}
  • 启动类DubboSiteApplication。(开启Dubbo扫描)
java 复制代码
package com.hyl.site.simple;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo  // 开启dubbo功能
public class DubboSiteApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboSiteApplication.class, args);
    }
}
  • 提供application.yml配置文件。(spring、dubbo消费方基础配置)
XML 复制代码
server:
  port: 8001

spring:
  application:
    name: dubbo-site-simple

dubbo:
  application:
    name: dubbo-site-simple
    logger: slf4j
    qos-port: 22227
  registry:
    address: nacos://127.0.0.1:8848
  consumer:  #消费方专属
    timeout: 15000
    check: false

三、测试。
(1)debug启动服务,查看运行情况。

(2)访问nacos本地控制台地址。
  • 注:想看到消费者服务列表加:registry parameters.register-consumer-url: true 。


(3)测试controller。(验证服务的远程调用/消费)

相关推荐
学习编程的Kitty4 小时前
算法——位运算
java·前端·算法
用户904706683574 小时前
如何使用 Spring MVC 实现 RESTful API 接口
java·后端
刘某某.4 小时前
数组和小于等于k的最长子数组长度b
java·数据结构·算法
程序员飞哥4 小时前
真正使用的超时关单策略是什么?
java·后端·面试
用户904706683574 小时前
SpringBoot 多环境配置与启动 banner 修改
java·后端
小old弟5 小时前
后端三层架构
java·后端
花花鱼5 小时前
spring boot 2.x 与 spring boot 3.x 及对应Tomcat、Jetty、Undertow版本的选择(理论)
java·后端
温柔一只鬼.5 小时前
Docker快速入门——第二章Docker基本概念
java·docker·容器
要争气5 小时前
5 二分查找算法应用
java·数据结构·算法