Dubbo快速入门(二):第一个Dubbo程序(附源码)

文章目录

本博客配套源码:gitlab仓库

首先,在服务器上部署zookeeper并运行,可以参考我的另一篇教程:https://blog.csdn.net/Tracycoder/article/details/142792750

注意事项:

  • 生产者、消费者中服务的包路径一定要一致,不然会导致注册和消费失败!
  • 先启动生产者,再启动消费者!不然会启动失败!
  • 各依赖的版本一定要兼容,不然项目会启动失败!

一定要注意以上几点,踩了几个小时的坑,说多了都是泪!

一、生产者工程

0.目录结构

1.依赖

pom.xml

xml 复制代码
<?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>org.example</groupId>
    <artifactId>dubbo_study_provider</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <!-- Spring Boot Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!-- Dubbo Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

        <!-- Zookeeper Client -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>5.4.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.4.0</version>
        </dependency>

        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.29.2-GA</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-x-discovery-server -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-x-discovery-server</artifactId>
            <version>5.4.0</version>
        </dependency>


        <!-- Spring Boot Test Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

2.配置文件

applicaiton.yml

yml 复制代码
server:
  port: 8080

# Dubbo
dubbo:
  application:
    name: dubbo_provider
  registry:
    address: zookeeper://你的zookeeperIP:2181
  protocol:
    name: dubbo
    port: 20880

3.启动类

java 复制代码
package tracy;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo(scanBasePackages = "tracy.provider.service")
public class ProviderApplication {

    public static void main(String[] args) {
        System.setProperty("zookeeper.sasl.client", "false");
        SpringApplication.run(ProviderApplication.class, args);
        System.out.println("provider服务启动成功!!!");
    }
}

4.生产者服务

java 复制代码
package tracy.provider.service;

public interface HelloService {
    String sayHello(String name);
}
java 复制代码
package tracy.provider.service;

import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;


@DubboService(version = "1.0.0")
@Component
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "hello "+name+"!";
    }
}

二、消费者工程

0.目录结构

1.依赖

pom.xml

xml 复制代码
<?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>org.example</groupId>
    <artifactId>dubbo_study_consumer</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <!-- Spring Boot Starter -->
        <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>

        <!-- Dubbo Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

        <!-- Zookeeper Client -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>5.4.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.4.0</version>
        </dependency>

        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.29.2-GA</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-x-discovery-server -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-x-discovery-server</artifactId>
            <version>5.4.0</version>
        </dependency>


        <!-- Spring Boot Test Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

2.配置文件

application.yml

yml 复制代码
server:
  port: 8081

# Dubbo
dubbo:
  application:
    name: dubbo_consumer
  registry:
    address: zookeeper://你的zookeeperIP:2181
  consumer:
    check: false  # 设置为 false,避免消费者启动时检查提供者状态

3.启动类

java 复制代码
package tracy;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {

    public static void main(String[] args) {
        System.setProperty("zookeeper.sasl.client", "false");
        SpringApplication.run(ConsumerApplication.class, args);
        System.out.println("consumer服务启动成功!!!");
    }
}

4.服务接口

java 复制代码
package tracy.provider.service;

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

5.controller接口

java 复制代码
package tracy.controller;

import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import tracy.provider.service.HelloService;

@RestController
@RequestMapping("/hello")
public class HelloController {

    @DubboReference  // 使用 DubboReference 注解引用远程服务
    private HelloService helloService;

    @GetMapping("/sayHello")
    public String sayHello(@RequestParam String name) {
        return helloService.sayHello(name);
    }
}

三、测试代码

先启动zookeeper,然后启动provider,最后启动consumer。

然后在接口测试工具中访问接口:

访问成功!

相关推荐
程序员皮皮林3 天前
Dubbo 的 SPI 和 JDK 的 SPI 有什么区别?
java·开发语言·dubbo
XWalnut4 天前
dubbo入门
dubbo
金融Tech趋势派4 天前
2026企业微信SCRM与服务商测评:私域获客、会话存档、AI能力全维度评估
人工智能·dubbo·企业微信
阿拉金alakin4 天前
NAT 网络地址转换:工作流程与原理总结
dubbo·nat
小二·5 天前
国产大模型 API 横评
dubbo·api
weixin_397574098 天前
AI Agent三层架构设计原理
人工智能·dubbo
それども9 天前
怎么理解TCP的状态
java·网络·网络协议·tcp/ip·dubbo
Aaswk10 天前
计算机网络概述
网络·网络协议·tcp/ip·计算机网络·http·dubbo
啦啦啦_999914 天前
2. 文本预处理_2
自然语言处理·dubbo
Ww.xh15 天前
ESP8266接入百度云MQTT完整指南
java·dubbo·百度云