SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4构建你的微服务体系

Easter79
• 阅读 318

简单几步使用最新版本的DUBBO构建你的微服务体系

NACOS注册中心

  • github下载最新版本的nacos
  • 上传至服务器并解压
  • 单机启动sh startup.sh -m standalone
  • nacos 控制台访问地址http://192.168.136.129:8848/nacos,使用账号nacos/nacos登录并访问 SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4构建你的微服务体系

项目框架

本次案例包含三个组件

  • 公共接口层 dubbo-api
  • 生产者 dubbo-provider
  • 消费者 dubbo-consumer 代码目录如下:
    SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4构建你的微服务体系

父目录

父目录主要是定义公共组件依赖,版本号,pom文件如下

<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>
    <packaging>pom</packaging>

    <modules>
        <module>dubbo-api</module>
        <module>dubbo-provider</module>
        <module>dubbo-consumer</module>
    </modules>

    <groupId>com.jianzh5</groupId>
    <artifactId>dubbo-demo</artifactId>
    <version>1.0-SNAPSHOT</version>


    <properties>
        <java.version>1.8</java.version>
        <netty-all.version>4.0.35.Final</netty-all.version>
        <spring-boot.version>2.1.9.RELEASE</spring-boot.version>
        <dubbo.version>2.7.3</dubbo.version>
        <nacos-client.version>1.1.4</nacos-client.version>
    </properties>


    <dependencyManagement>
        <dependencies>
            <!--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>

            <!-- Dubbo Registry Nacos -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>${nacos-client.version}</version>
            </dependency>


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

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!--接口-->
            <dependency>
                <groupId>com.jianzh5</groupId>
                <artifactId>dubbo-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>

        </dependencies>
    </dependencyManagement>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

在pom文件中直接依赖接口,这样生产者和消费者都可以使用了

接口层dubbo-api定义

  • pom

    dubbo-demo com.jianzh5 1.0-SNAPSHOT 4.0.0 com.jianzh5 dubbo-api jar

  • 定义真实的接口

    /**

    • @author jianzh5
    • @date 2019/11/5 10:45

    */ public interface HelloService { String sayHello(); }

生产者dubbo-provider

  • pom

    dubbo-demo com.jianzh5 1.0-SNAPSHOT 4.0.0 com.jianzh5 dubbo-provider org.springframework.boot spring-boot-starter org.apache.dubbo dubbo-spring-boot-starter org.apache.dubbo dubbo org.apache.dubbo dubbo-registry-nacos com.alibaba.nacos nacos-client com.jianzh5 dubbo-api org.springframework.boot spring-boot-maven-plugin

  • 配置文件application.xml

    dubbo.application.name = dubbo-provider dubbo.registry.address = nacos://192.168.136.129:8848 dubbo.scan.base-packages=com.jianzh5.provider.service.impl dubbo.protocol.port=20881 dubbo.protocol.name=dubbo

  • 接口实现

    @Service public class HelloServiceImpl implements HelloService {

    public String sayHello() {
        return "欢迎关注微信公众号:JAVA日知录";
    }
    

    }

注意这里的@service引用的是org.apache.dubbo.config.annotation.Service,不要引用错了

  • 启动类

    @SpringBootApplication @EnableDubbo public class PrivoderBootstrap { public static void main(String[] args) { SpringApplication.run(PrivoderBootstrap.class, args); } }

需要引入@EnableDubbo注解

消费者dubbo-consumer

  • pom

    dubbo-demo com.jianzh5 1.0-SNAPSHOT 4.0.0 com.jianzh5 dubbo-consumer org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.apache.dubbo dubbo-spring-boot-starter org.apache.dubbo dubbo org.apache.dubbo dubbo-registry-nacos com.alibaba.nacos nacos-client com.jianzh5 dubbo-api org.springframework.boot spring-boot-maven-plugin

  • 配置文件application.properties

    spring.application.name=dubbo-consumer dubbo.registry.address = nacos://192.168.136.129:8848 server.port=9090

  • 消费者HelloController

    /**

    • @author jianzh5
    • @date 2019/11/5 11:29

    */ @RestController public class HelloController {

    @Reference
    private HelloService helloService;
    
    @GetMapping("/sayHello")
    public String sayHello(){
        return helloService.sayHello();
    }
    

    }

使用@Reference注解注入HelloService

  • 接口启动类

    @SpringBootApplication public class ConsumerBootstrap {

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

    }

项目启动

  • 启动生产者 dubbo-provider

  • 启动消费者 dubbo-consumer

  • 查看nacos控制台,观察是否注册 SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4构建你的微服务体系

  • 访问浏览器http://localhost:9090/sayHello查看接口返回 SpringBoot2.1.9+dubbo2.7.3+Nacos1.1.4构建你的微服务体系

欢迎关注我的个人公众号:JAVA日知录

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
2个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi /etc/profile2:按字母键i进入编辑模式,在最底部添加内容: JAVAHOME/opt/jdk1.8.0152 CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jar PATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、 请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。 创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现 接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿 吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
2个月前
css问题
1、 在IOS中图片不显示(给图片加了圆角或者img没有父级) <div<img src""/</div div {width: 20px; height: 20px; borderradius: 20px; overflow: h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
小森森 小森森
2个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本 欢迎添加左边的微信一起探讨!项目地址:](https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n) \2. Bug修复更新日历 2. 情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意), \ \ 和 注意
晴空闲云 晴空闲云
2个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。 盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
1个月前
快速入门|使用MemFire Cloud构建React Native应用程序
> MemFire Cloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序 select * from table_name order id desc; 2.按照指定(多个)字段排序 select * from table_name order id desc,status desc; 3.按照指定字段和规则排序 selec
Wesley13 Wesley13
1年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表: **时辰** **时间** **24时制** 子时 深夜 11:00 - 凌晨 01:00 23:00 - 01 :00 丑时 上午 01:00 - 上午 03:00 01:00 - 03 :00 寅时 上午 03:00 - 上午 0
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_
helloworld_28799839 helloworld_28799839
2个月前
常用知识整理
# Javascript ## 判断对象是否为空 ```js Object.keys(myObject).length === 0 ``` ## 经常使用的三元运算 > 我们经常遇到处理表格列状态字段如 `status` 的时候可以用到 ``` vue