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。

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

访问成功!

相关推荐
松树戈4 天前
openfeign与dubbo调用下载excel实践
vue.js·spring cloud·elementui·dubbo
程序员buddha9 天前
SpringBoot+Dubbo+Zookeeper实现分布式系统步骤
分布式·zookeeper·dubbo·springboot
hello_zzw10 天前
dubbo-token验证
dubbo
小羊在奋斗12 天前
基于Boost库、Jsoncpp、cppjieba、cpp-httplib等构建Boost搜索引擎
搜索引擎·dubbo
kill bert18 天前
第35周Zookkeeper+Dubbo Zookkeeper
dubbo
xiaoxi66620 天前
Dubbo实战:四步实现注册中心平滑迁移
分布式·nacos·dubbo·注册中心
爬山算法20 天前
Dubbo(81)如何设计一个高可用的Dubbo服务?
dubbo
鸿蒙布道师20 天前
百度Create大会深度解读:AI Agent与多模态模型如何重塑未来?
人工智能·深度学习·神经网络·机器学习·百度·自然语言处理·dubbo
和算法死磕到底25 天前
ubantu18.04(Hadoop3.1.3)Hive3.1.2安装指南
大数据·数据库·hive·hadoop·mysql·hdfs·dubbo
Seven971 个月前
JDK的SPI有什么缺陷?dubbo做了什么改进?
java·dubbo