Idea创建springBoot+dubbo脚手架(dubo+nacos)- 脚手架系列(一)

1.dubbo介绍

Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能 、 轻量级的开源 Java RPC框架 它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现 。

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的 RPC远程服务调用方案、 服务治理方案。

 

服务提供者 (Provider):暴露服务的服务提供方 服务提供者在启动时,向注册中心注

册自己提供的服务。

服务消费者 (Consumer):调用远程服务的服务消费方 服务消费者在启动时,向注册

中心订阅自己所需的服务 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一

台提供者进行调用,如果调用失败,再选另一台调用。

注册中心(Registry)注册中心返回服务提供者地址列表给消费者,如果有变更,注册

中心将基于长连接推送变更数据给消费者。

监控中心(Monitor)服务消费者和提供者,在内存中累计调用次数和调用时间,定时

每分钟发送一次统计数据到监控中心。

本文是脚手架系列的第一篇,有兴趣的同学可以进入导航页进行学习:

从零开始duboo脚手架搭建

2.项目骨架搭建

父项目:dubboparent

  <module>dubbo-api</module>

  <module>dubbo-provider</module>

 <module>dubbo-consumer</module>

2.1 创建父项目

https://start.aliyun.com

接下来就一直往下点就可

2.2 dubbo子项目的创建

后面创建子项目的过程和父项目相同

分别创建dubbo-api,dubbo-provider,dubbo-consumer

创建完成后删除.mvn,HELP.md,mvnw,mvnd.cmd等文件,结构如下:

展开如下:

到这里为止,项目的架构也就出来了。

3、模块关联

完成了上面的步骤,各个模块还是相互独立。此时需要修改各个模块的pom.xml文件让他们关联起来。

3.1父项目dubboparent修改pom文件

1.将父项目 packaging改为 pom

如果没有将packing 指定为pom ,那么子模块之间将无法正常的进行依赖传递。
我们执行的maven命令的时候将首先对父项目执行,而后当 父项目 的packing 类型为 pom 时,将对所有的子模块执行同样的命令,否则将无法执行同样的命令,那么依赖的传递将无法由maven 编译或者打包命令 得以执行。

总结:Maven-多模块项目的聚合,父项目必须将packing 指定 为 pom

2.添加总父项目为 springboot

3.添加父项目刚创建的各个模块

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dubboscaffold</groupId>
    <artifactId>dubboparent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubboparent</name>
    <description>Demo project for Spring Boot</description>

    <!--父项目必须将packaging设置为pom-->
    <packaging>pom</packaging>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>
    

    <!--总父项目为spring-boot-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
    </parent>

    <!--添加子模块-->
    <modules>
        <module>dubbo-api</module>
        <module>dubbo-provider</module>
        <module>dubbo-consumer</module>
    </modules>

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

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.5.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.6</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

</project>

 3.2子项目dubbo-api修改pom文件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dubboscaffold</groupId>
    <artifactId>dubbo-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-api</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <!--给子模块添加父项目,需要给出父项目pom文件路径-->
    <parent>
        <groupId>com.dubboscaffold</groupId>
        <artifactId>dubboparent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

</project>

 3.3子项目dubbo-provider修改pom文件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dubboscaffold</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <!--给子模块添加父项目,需要给出父项目pom文件路径-->
    <parent>
        <groupId>com.dubboscaffold</groupId>
        <artifactId>dubboparent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <dependencies>

        <!--添加api依赖-->
        <dependency>
            <groupId>com.dubboscaffold</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <!-- Dubbo Spring Cloud Starter -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

        <!-- 实现对 Dubbo 的自动化配置 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>

        <!-- 使用 Nacos 作为注册中心 -->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>2.7.4.1</version>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

</project>

 3.4子项目dubbo-consumer修改pom文件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dubboscaffold</groupId>
    <artifactId>dubbo-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-consumer</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <!--给子模块添加父项目,需要给出父项目pom文件路径-->
    <parent>
        <groupId>com.dubboscaffold</groupId>
        <artifactId>dubboparent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <dependencies>

        <!--添加api依赖-->
        <dependency>
            <groupId>com.dubboscaffold</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

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

        <!-- 引入 Spring Boot 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!-- 实现对 Dubbo 的自动化配置 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>

        <!-- 使用 Nacos 作为注册中心 -->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>2.7.4.1</version>
        </dependency>

    </dependencies>

</project>

 3.5刷新maven看是否有报错

如果有报错看看是不是直接复制进去的,因为是直接从网上拷贝过来粘贴在pom.xml中的可能格式会有冲突

 3.6在父项目下编译整个项目

 当控制台出现如上图所示的结果,证明整个项目关联成功。

4、dubbo接入nacos的简单应用

        建立服务提供者,消费者,消费者通过nacos调用服务。

        需要搭建提前将nacos环境搭好。快速搭建可以参考下文链接:

        Nacos快速部署

4.1 dubbo-api创建接口

application.yml  

spring:
  application:
    name: dubbo-api

TestService 

package com.dubboscaffold.dubboapi.api;

public interface TestService {

    String sayhello();
}

4.2 dubbo-provider创建服务

 application.yml 

spring:
  application:
    name: dubbo-provider
server:
  port: 8081

# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:
  # Dubbo 应用配置
  application:
    name: user-service-provider # 应用名
  # Dubbo 注册中心配
  registry:
    address: nacos://192.168.160.128:8848 # 注册中心地址
  # Dubbo 服务提供者协议配置
  protocol:
    port: -1 # 协议端口。使用 -1 表示随机端口。
    name: dubbo # 使用 `dubbo://` 协议。更多协议,可见 http://dubbo.apache.org/zh-cn/docs/user/references/protocol/introduction.html 文档
  # Dubbo 服务提供者配置
  provider:
    timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒
    TestService:
      version: 1.0.0
  # 配置扫描 Dubbo 自定义的 @Service 注解,暴露成 Dubbo 服务提供者
  scan:
    base-packages: com.dubboscaffold.dubboprovider.service.impl

TestServiceImpl

package com.dubboscaffold.dubboprovider.service.impl;

import com.dubboscaffold.dubboapi.api.TestService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

@Component
@Service(version = "${dubbo.provider.TestService.version}")
public class TestServiceImpl implements TestService {

    @Override
    public String sayhello() {
        return "Hello Dubbo!!!";
    }
}

4.3dubbo-consumer创建消费者

application.yml 

spring:
  application:
    name: dubbo-consumer
server:
  port: 8082

# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:
  # Dubbo 应用配置
  application:
    name: user-service-consumer # 应用名
  # Dubbo 注册中心配置
  registry:
    address: nacos://192.168.160.128:8848 # 注册中心地址
  # Dubbo 消费者配置
  consumer:
    timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒
    TestService:
      version: 1.0.0

TestController  

package com.dubboscaffold.dubboconsumer.controller;

import com.dubboscaffold.dubboapi.api.TestService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/test")
public class TestController {

    @Reference(version = "${dubbo.consumer.TestService.version}")
    private TestService testService;

    @RequestMapping("/hello")
    @ResponseBody
    public String sayHello(){
        return testService.sayhello();
    }

}

 4.4 项目启动

        启动顺序:

                1、dubbo-provider

                2、dubbo-consumer

启动成功后可以在nacos管理页面(http://127.0.0.1:8848/nacos)进行查看,服务和消费者是否已经在上面可以查询到:

浏览器调用http://127.0.0.1:8082/test/hello

 

 这样项目就成功运行了。

这样一个最基础的分布式dubbo+nacos脚手架就搭好了,后续还会继续整合其他组件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六木老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值