Dubbo 快速入门使用教程

发布时间:2023年12月17日

Dubbo 介绍

dubbo 2.x版本官方文档
参考

Apache Dubbo 是一款 RPC(Remote Procedure Call 远程过程调用)服务开发框架,提供了远程调用方案和服务治理方案。

Dubbo 发展历程

  • 2008年,Dubbo 最初是阿里巴巴内部的一个 RPC 框架,用于解决分布式系统中服务调用的问题。

  • 2017 年:Dubbo 被正式捐献给 Apache 软件基金会并成为 Apache 顶级项目。

  • 2019 年:Apache Dubbo 正式发布了 2.7.0 版本,引入了一些新特性和改进,如异步调用、响应式编程模型、SPI 机制的优化等。

    Dubbo 2.6.x (包名:com.alibaba)版本

    Dubbo 2.7.x (包名:org.apache.dubbo)版本。

Dubbo 架构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Provider:暴露服务的服务提供方
  • Consumer:调用远程服务的服务消费方
  • Registry:服务注册与发现的注册中心
  • Monitor:统计服务的调用次数和调用时间的监控中心
  • Container:服务运行容器

调用过程

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo 入门使用

文中涉及到的安装包和代码示例,需要的请关注【Qin的学习营地】,回复【dubbo入门使用教程】

一、Zookeeper 注册中心安装启动

这里下载 Zookeeper 3.6.4 版本的并在 windows 下启动。

下载对应安装包后解压,进入 bin 目录,找到 zkServer.cmd。在启动之前,可以打开 zkServer.cmd 文件,在后面添加 pause,可以在出错时不会闪退,方便查看错误原因。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

双击 zkServer.cmd 启动,这里启动会报如下的错,这个错误信息是提示缺少一个 zoo.cfg 文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进入 config 目录下,可以看到有一个 zoo_sample.cfg 文件,这个文件不会生效,需要改成 zoo.cfg,在这里复制一份改为 zoo.cfg 配置文件,重新启动即可生效。 这里顺带配置一下 zoo.cfg 配置文件,配置 dataDir = F:\download,指定数据目录位置。

继续点击 zkServer.cmd 启动,发现还是报错,提示找不到 org.apache.zookeeper.server.quorum.QuorumPeerMain 启动类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里主要是因为下载版本的问题,之前下载的是源码版本,现在重新下载二进制版本,启动成功了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二、服务提供方

使用 spring boot 整合 dubbo 实现。

1、引入依赖

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

<!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-dependencies-zookeeper</artifactId>
    <version>${dubbo.version}</version>
</dependency>

2、服务提供方实现类

接口:

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

实现类:

// @Service: 这是 Dubbo 框架的注解,用于标记一个类为服务提供者。使得 Dubbo 可以自动扫描并将服务发布到注册中心,供消费者发现和调用。
@Service(interfaceClass=HelloService.class , retries=-1, version="1.0.0", timeout=15000)
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "【producer】 Hello, " + name + "!";
    }

}

3、配置相关参数

# dubbo-provider.properties
dubbo.application.name=dubbo-provider
## 指定 Dubbo 注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
## 指定 Dubbo 服务的协议类型和端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
## 指定需要扫描的基础包,用于查找 Dubbo 服务的实现类。
dubbo.scan.base-packages=com.example.dubbo.producer.service

三、服务消费方

使用 spring boot 整合 dubbo 实现。

1、引入依赖

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

<!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-dependencies-zookeeper</artifactId>
    <version>${dubbo.version}</version>
</dependency>

2、引用服务提供方暴露的接口

使用服务提供方的dubbo接口::

public class ProducerService {
	// @Reference 是 Dubbo 框架中的一个注解,用于在消费者端标记对 Dubbo 服务的引用。
    // Dubbo 框架会自动为该注解标记的字段或方法参数注入代理对象。这个代理对象封装了底层的远程调用逻辑,使得消费者可以像调用本地方法一样调用远程服务。
    @Reference(retries=-1, version="1.0.0", timeout = 15000)
    private HelloService helloService;

    public String consumerSayHello(String name){
        String hello = helloService.sayHello(name);
        System.out.println("[consumer] "+ hello);
        return hello;
    }
}

3、配置相关参数

# dubbo-consumer.properties
dubbo.application.name=dubbo-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=30880
文章来源:https://blog.csdn.net/longool/article/details/135035449
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。