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。(验证服务的远程调用/消费)

相关推荐
木木子99992 分钟前
业务架构、应用架构、数据架构、技术架构
java·开发语言·架构
qq_5470261792 小时前
Flowable 工作流引擎
java·服务器·前端
鼓掌MVP3 小时前
Java框架的发展历程体现了软件工程思想的持续进化
java·spring·架构
编程爱好者熊浪4 小时前
两次连接池泄露的BUG
java·数据库
lllsure4 小时前
【Spring Cloud】Spring Cloud Config
java·spring·spring cloud
鬼火儿4 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
NON-JUDGMENTAL4 小时前
Tomcat 新手避坑指南:环境配置 + 启动问题 + 乱码解决全流程
java·tomcat
摇滚侠5 小时前
Spring Boot3零基础教程,Spring Boot 应用打包成 exe 可执行文件,笔记91 笔记92 笔记93
linux·spring boot·笔记
chxii5 小时前
Maven 详解(上)
java·maven
李少兄5 小时前
IntelliJ IDEA 远程调试(Remote Debugging)教程
java·ide·intellij-idea