美文网首页IT@程序员猿媛
Nacos+Dubbo构建微服务示例项目

Nacos+Dubbo构建微服务示例项目

作者: 敬亭阁主 | 来源:发表于2020-08-11 12:22 被阅读0次

基本结构

  • Nacos:开源的注册中心和配置中心,可直接下载打包应用,启动即可

  • DemoInterface:服务接口定义

  • DemoService:实现服务接口,并注册为Provider

  • DemoClient:服务消费者,通过自动注入服务实例,可直接调用服务接口

Nacos管理界面

Nacos

Nacos-Server部署相对简单,它的发布版本见Github的Releases页面。单机模式在不修改配置的前提下直接启动,使用的是内存数据库,重启后数据会被清空。

DemoInterface

这个工程用于在服务的提供者和消费者之间进行一个接口设计,和通常的Java工程没有区别,这里仅列出接口代码。

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

DemoService

配置文件application.properties

#当前服务/应用的名字
dubbo.application.name  = demo-service-provider

#注册中心的协议和地址
dubbo.registry.address  = nacos://127.0.0.1:8848

#服务版本及分组名
dubbo.service.version   = 1.0.0
dubbo.service.group     = demo

#通信规则(通信协议和接口)
dubbo.protocol.host     = 127.0.0.1
dubbo.protocol.name     = dubbo
dubbo.protocol.port     = 20880

#连接监控中心
dubbo.monitor.protocol  = registry

#开启包扫描,可替代 @EnableDubbo 注解
##dubbo.scan.base-packages=com.apollo.dubbo.Services

Maven依赖

    <dependencies>
        <dependency>
            <groupId>com.apollo.dubbo</groupId>
            <artifactId>DemoInterface</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

这里依赖项比较多,尤其是dubbo被贡献给apache后,包名从com.alibaba.dubbo变成了org.apache.dubbo,容易产生混淆,这里统一使用org.apache.dubbo

启动代码,使用@EnableDubbo注解激活服务注册功能

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

服务代码,使用@Service注解激活服务定义,注意versiongroup属性都是必须的

@Service(version = "${dubbo.service.version}", group = "${dubbo.service.group}")
@Component
public class DemoServiceImpl implements DemoService {
    /**
     * The default value of ${dubbo.application.name} is ${spring.application.name}
     */
    @Value("${dubbo.application.name}")
    private String serviceName;

    public String sayHello(String name) {
        return String.format("[%s] : Hello, %s", serviceName, name);
    }
}

这里和Spring Cloud不同的是,dubbo服务不一定需要使用Web方式提供服务,缺省的dubbo协议实际上就是RMI协议,效率要比Web方式更高。

DemoClient

通常Consumer会对外提供RestWeb接口,内部则通过dubbo协议访问服务提供方。

配置文件application.properties

spring.application.name = demo-consumer

# 对外提供的Web服务地址
server.port             = 8900

dubbo.registry.address  = nacos://127.0.0.1:8848

dubbo.service.version   = 1.0.0
dubbo.service.group     = demo

dubbo.protocol.host     = 127.0.0.1

Maven依赖

    <dependencies>
        <dependency>
            <groupId>com.apollo.dubbo</groupId>
            <artifactId>DemoInterface</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <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>
    </dependencies>

这里增加了spring-boot-starter-web包,用于对外提供Web服务。

作为一个标准的SpringBoot应用,启动代码和通常没有区别

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

消费代码,使用@Reference注解直接进行服务实例的注入

@RestController
public class DemoConsumer {
    @Reference(version = "${dubbo.service.version}", group="${dubbo.service.group}")
    private DemoService demoService;

    @GetMapping
    public String test() {
        String info = demoService.sayHello("dubbo");
        return info;
    }
}

Dubbo的消费者代码可以通过接口进行访问,要比Spring Cloud的RestWeb接口访问更直观,也更容易管理。

其它

同样的,启动顺序为:Nacos-Server -> DemoService -> DemoClient

由于该解决方案涉及到了多个开源项目(Nacos,Dubbo,SpringBoot),配置起来略显繁琐,而且由于Dubbo正处于快速发展期,代码也不够稳定,网上许多文章都已过时,开发过程中遇到的问题解决起来比较困难,但是由于Dubbo支持接口方式的消费方式,较好地满足了开发过程的约束要求,同时效率也要优于Web方式的调用,因此可以考虑使用。

源码已上传码云:com.apollo.dubbo.demo

相关文章

  • Nacos+Dubbo构建微服务示例项目

    基本结构 Nacos:开源的注册中心和配置中心,可直接下载打包应用,启动即可 DemoInterface:服务接口...

  • Vue项目构建与管理--利用脚手架构建工程

    构建项目 命令行 示例image 安装依赖 命令行 示例image 运行项目 命令行 示例image 打包项目 命...

  • Spring Cloud 构建微服务示例项目

    基本结构 注册中心:EurekaServer注册中心提供服务的注册和查询能力。 服务提供方:HelloWorldS...

  • SpringBoot分模块项目搭建

    一、项目创建 -创建springboot项目 -选择构建方式,本示例选择Maven POM构建分模块项目(单模块请...

  • ArCall功能介绍手册

    项目概述 ARCall 是anyRTC模仿微信呼叫的示例项目,演示了如何通过 anyRTC云服务,并配合 anyR...

  • maven常用命令介绍

    一、Maven的基本概念 主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。1.1、项目构建 项目构建...

  • k8s构建容器化微服务项目

    容器化微服务项目 熟悉Spring Cloud微服务项目 源代码编译构建 构建项目镜像并推送到镜像仓库 登录har...

  • 制作自己的镜像

    ?制作自己的镜像 为自己的 Web 项目构建镜像 示例项目代码:https://github.com/gzyunk...

  • Springboot+Dubbo+ Zookeeper分布式服务

    示例 项目构建新建一个Maven工程,该工程为父工程,只要包含两个模块,一个是服务提供方模块dubbo-provi...

  • TCP服务的事件

    在《构建TCP服务》的示例中,代码分为服务器事件和连接事件。 1. 服务器事件 对于通过net.createSe...

网友评论

    本文标题:Nacos+Dubbo构建微服务示例项目

    本文链接:https://www.haomeiwen.com/subject/phwedktx.html