文章目录

  • Dubbo 介绍
  • Dubbo 入门使用
    • 一、Zookeeper 注册中心安装启动
    • 二、服务提供方
    • 三、服务消费方

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><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 {@Overridepublic String sayHello(String name) {return "【producer】 Hello, " + name + "!";}}

3、配置相关参数

# dubbo-provider.propertiesdubbo.application.name=dubbo-provider## 指定 Dubbo 注册中心的地址dubbo.registry.address=zookeeper://127.0.0.1:2181## 指定 Dubbo 服务的协议类型和端口dubbo.protocol.name=dubbodubbo.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><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.propertiesdubbo.application.name=dubbo-consumerdubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.protocol.name=dubbodubbo.protocol.port=30880