当前位置: 首页 > article >正文

Springboot + nacos + dubbo 实现微服务架构

第一步.准备nacos

我们要准备好nacos工具官网:Nacos 快速开始 | Nacos 官网
下载安装很简单,直接去官网看

启动命令:先进入bin目录 执行 
sh startup.sh -m standalone

如果是window电脑

执行startup.cmd -m standalone命令以独立模式启动服务器。或者,您也可以双击 startup.cmd 来运行 NacosServer

第二步.搭建微服务项目框架

一般微服务在父项目下新建3个字模块


api模块定义接口
consumer模块用来消费接口

provider模块用来提供接口实现
下图是项目结构

下面我们来搭建项目

先新建一个父项目dubbo-spring-boot

建好父项目然后建3个字模块dubbo-spring-boot-api,dubbo-spring-boot-provider,dubbo-spring-boot-consumer我这里演示一个,其他两步骤一样只需要修改名字

 

建好项目我们需要添加pom依赖以及配置项目内容

配置父节点

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>

    <groupId>org.example</groupId>
    <artifactId>dubbo-spring-boot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>dubbo-spring-boot-api</module>
        <module>dubbo-spring-boot-provider</module>
        <module>dubbo-spring-boot-consumer</module>
    </modules>

    <properties>
        <dubbo.version>3.0.7</dubbo.version>
        <spring-boot.version>2.6.7</spring-boot.version>
        <lombok.version>1.18.24</lombok.version>
        <lombok.version>1.18.20</lombok.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- dubbo -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

            <!-- nacos作注册中心-->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
配置dubbo-spring-boot-api

这模块用来定义接口,我们先新建一个org.apache.dubbo包,新建一个接口。

public interface ITestService {
    String sayHello(String name);
}

配置dubbo-spring-boot-provider

这个模块用来实现接口

先配置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>org.example</groupId>
        <artifactId>dubbo-spring-boot</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>dubbo-spring-boot-provider</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>org.example</groupId>
            <artifactId>dubbo-spring-boot-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-common</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-remoting-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

配置application.yml

server:
  port: 8001

spring:
  application:
    name: dubbo-spring-boot-provider

dubbo:
  protocol:
    name: dubbo
    port: 20881
  # 注册中心地址
  registry:
    address: nacos://192.168.10.61:8848
  application:
    name: dubbo-provider

新建org.apache.dubbo.provider.api.impl包,新增ITestService实现类TestServiceImpl

并需要用@DubboService来注解

@DubboService(group = "test", version = "1.0.0")
public class TestServiceImpl implements ITestService {
    @Override
    public String sayHello(String name) {
        return "hello:" + name;
    }
}

启动类 需要用@EnableDubbo来注解

@EnableDubbo
@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}

 

配置dubbo-spring-boot-consumer

这个模块用来调用我们实现的接口

配置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>org.example</groupId>
        <artifactId>dubbo-spring-boot</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>dubbo-spring-boot-consumer</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>org.example</groupId>
            <artifactId>dubbo-spring-boot-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>


        <!-- spring boot starter -->
        <!-- spring boot starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-common</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-remoting-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

 

配置application.yml

server:
  port: 8002

spring:
  application:
    name: dubbo-spring-boot-consumer

dubbo:
  protocol:
    name: dubbo
    port: 20881
  # 注册中心地址
  registry:
    address: nacos://192.168.10.61:8848
  application:
    name: dubbo-consumer
  consumer:
    # 负载均衡策略
    loadbalance: roundrobin

新增org.apache.dubbo.consumer包下新增controller


@RestController
@RequestMapping("/consumer")
public class TestController {

    @DubboReference(group = "test", version = "1.0.0", timeout = 6000)
    private ITestService iTestService;

    @GetMapping("test")
    public String test(String str){
        return iTestService.sayHello(str);
    }
}

启动类:

@EnableDubbo
@SpringBootApplication
public class DubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }

}

 

到此我们就完成了所有配置,最后进行测试

我们先看一下nacos注册的服务访问http://127.0.0.1:8848/nacos

可以看到我们服务已经注册到nacos中

 下面调用,可以看到调用成功


http://www.kler.cn/a/573891.html

相关文章:

  • JavaEE基础之- ajax
  • DeepSeek大模型+RAGFlow实战指南:构建知识驱动的智能问答系统
  • ​Unity插件-Mirror使用方法(七)组件介绍(​Network Animator)
  • Freertos卡在while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  • 时间复杂度分析与递归,以新南UNSW的COMP2521作业题为例
  • JVM常用概念之对象初始化的成本
  • 快速生成viso流程图图片形式
  • Scala 中的数据类型转换规则
  • 5.RabbitMQ交换机详解
  • 迷你世界脚本方块接口:Block
  • 地下井室可燃气体监测装置:守护地下安全,防患于未“燃”!
  • 《基于WebGL的matplotlib三维可视化性能调优》——让大规模3D数据流畅运行在浏览器端!
  • 【动手学深度学习】基于Python动手实现线性神经网络
  • c++为什么支持simd,而java不支持
  • PHP Error处理指南
  • 分布式存储学习——1.HBase的安装和配置
  • Deepseek×ComfyUI革命性工作流:AI图像3倍速精修实战指南
  • JVM 的组成部分有什么
  • svn 通过127.0.01能访问 但通过公网IP不能访问,这是什么原因?
  • 什么是 JVM? JVM (Java Virtual Machine)