Dubbo 服务调用机制详解

基本架构与交互原理

在 Dubbo 分布式服务框架中,所有的服务调用都是基于 Java 接口进行交互的。这种接口契约式设计确保了服务提供者和消费者之间的解耦。具体工作流程如下:

  1. 接口协定:服务提供方和消费方首先需要共同定义一套标准的服务接口
  2. 服务注册:提供者实现这些接口后,将服务实例注册到注册中心
  3. 服务发现:消费者从注册中心获取可用服务列表
  4. 远程调用:消费者通过动态代理发起对提供者的RPC调用

Maven 工程结构说明

Dubbo 项目通常采用多模块的Maven工程结构,典型布局如下:

dubbo-demo/
├── dubbo-api/         # 接口定义模块
├── dubbo-provider/    # 服务提供方
└── dubbo-consumer/    # 服务消费方

父工程

创建一个父级工程,用于管理所有的模块,移除src目录。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>icu.wzk</groupId>
        <artifactId>dubbo-test</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>pom</packaging>
        <modules>
            <module>wzk-service-api</module>
            <module>wzk-producer</module>
            <module>wzk-consumer</module>
        </modules>

        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <dubbo.version>2.7.5</dubbo.version>
        </properties>

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo</artifactId>
                    <version>${dubbo.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-registry-zookeeper</artifactId>
                    <version>${dubbo.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-rpc-dubbo</artifactId>
                    <version>${dubbo.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-remoting-netty4</artifactId>
                    <version>${dubbo.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-serialization-hessian2</artifactId>
                    <version>${dubbo.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>

</project>

API模块

这个模块用于定义接口抽象类,不提供实际的实现。

接口定义

package icu.wzk.service;

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