使用spring-boot+maven+dubbo+nacos实现基础服务调用【原创】【亲测】

md 现在网上全是复制粘贴的文章 慢慢摸索终于勉强实现了 这个作为我初学的记录 里面有什么不对的地方欢迎指正

1.1 打开idea 点击创建项目-选择一个空项目

image-20220629170101073

1.2 进入项目后点击此处进入项目设置

image-20220629170414157

1.3 点击此处创建一个父模块 我这里是直接next 因为创建的目录很干净 没有springboot自带的配置和一些文件

image-20220629170557538

1.3.1 一个模块创建完成 开始创建它的子模块

image-20220629170916949

1.3.2 继续创建模块

image-20220629171017345

1.3.3 这里可以选择父模块 其他模块一样如此不再重复赘述

image-20220629171100223

1.4 最后构建完应该是这样的

image-20220629171255354

1.4.1 从父模块pom.xml文件开始添加依赖

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
​
        <dubbo.version>2.7.8</dubbo.version>
        <spring-cloud.version>Hoxton.SR4</spring-cloud.version>
        <spring.cloud.alibaba.version>2.2.2.RELEASE</spring.cloud.alibaba.version>
        <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
    </properties>
​
    <!--全局配置 这样它的子模块就不用指定版本了 方便统一管理-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
​
            <!-- SpringBoot 依赖配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Apache Dubbo  -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

1.4.2 进入子模块provider的pom.xml文件添加依赖 另外一个consumer一样如此 ps:其实这些依赖可以统一放在公共模块中

    <dependencies>
        <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>
        
        <!-- 接口依赖 注意名称-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>demo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
​
        <!-- nacos服务发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
​
        <!-- dubbo依赖 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>2.7.8</version>
        </dependency>
    </dependencies>

1.4.2 在consumer/provider模块中创建springboot启动类 注意目录结构位置

image-20220629172843893

1.4.3 依赖加载完成后可以开始配置服务发现和服务注册配置了

server:
  port: 8080
# 这里是发现服务的配置 白话就是 让这个provider服务在xx:8848注册中心命名空间为test里找
spring:
  application:
    name: provider
  cloud:
    nacos:
      discovery:
        server-addr: xx:8848
        namespace: test
​
# 服务provider在xx:8848里注册自己并把命名空间设置成test
dubbo:
  application:
    name: provider
  registry:
    address: nacos://xx:8848
    parameters:
      namespace: test
# 这里我的理解的是 使用哪种协议进行暴露服务
  protocol:
    name: dubbo
    port: -1
# 开启时不检查有没有能用的服务
  consumer:
    check: false

这里的消费者和服务者配置一样 因为一个服务者也可以是一个消费者

1.4.4

在消费者服务(consumer)中创建controller 使用@DubboReference 注解进行依赖注入

这个接口(HellService)统一放在api模块中

image-20220630093925484

1.4.5

这里是服务者(provider)实现类 如果说调用的方法入参是对象 记得进行序列化

image-20220630094042279

1.4.6

记得在服务者(provider)中需要指定一下实现类的位置

image-20220630094309159

1.4.7

开启两个服务 在nacos中可以看到两个服务都进行注册

上面两个是服务点击【详细】可以进行下线操作

下面是两个服务对接口的定义 用于匹配接口

image-20220630095321230

最后调用consumer的controller进行测试

image-20220630095912251

posted @ 2022-06-30 10:17  暗影霹雳神  阅读(342)  评论(0编辑  收藏  举报