springboot集成dubbo

Spring Boot 集成 Dubbo 可以帮助我们更方便地构建微服务架构。在使用 Spring Boot 和 Dubbo 进行微服务开发时,我们通常会创建服务提供者(Provider)和服务消费者(Consumer)两个项目。

1. 环境准备

  • JDK:8+
  • Maven:3.x
  • Spring Boot:2.5.x 或更高版本
  • Dubbo:3.x
  • Zookeeper:作为注册中心(需要本地安装或使用 Docker 部署)

2. 服务提供者(Provider)实现

2.1 创建 Spring Boot 项目

使用 Maven 创建一个 Spring Boot 项目,并添加 Dubbo 和 Zookeeper 相关依赖。

pom.xml:

<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>com.example</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>1.0.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>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
2.2 创建服务接口

src/main/java/com/example/dubbo/provider 目录下创建一个名为 service 的包,定义服务接口 HelloService

HelloService.java:

package com.example.dubbo.provider.service;

public interface HelloService {
    String sayHello(String name);
}
2.3 实现服务接口

src/main/java/com/example/dubbo/provider/service/impl 目录下创建一个名为 impl 的包,创建 HelloServiceImpl 类实现服务接口:

HelloServiceImpl.java:

package com.example.dubbo.provider.service.impl;

import com.example.dubbo.provider.service.HelloService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService(version = "1.0.0") // 使用 DubboService 注解暴露服务
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}
2.4 配置 application.yml

src/main/resources 目录下创建 application.yml 文件,配置 Dubbo 和 Zookeeper 相关信息:

application.yml:

server:
  port: 8081

dubbo:
  application:
    name: dubbo-provider
  registry:
    address: zookeeper://127.0.0.1:2181  # Zookeeper 注册中心地址
  protocol:
    name: dubbo
    port: 20880  # Dubbo 服务端口
2.5 编写启动类

src/main/java/com/example/dubbo/provider 目录下创建 DubboProviderApplication.java 启动类:

DubboProviderApplication.java:

package com.example.dubbo.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DubboProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}

3. 服务消费者(Consumer)实现

3.1 创建 Spring Boot 项目

使用 Maven 创建另一个 Spring Boot 项目,并添加 Dubbo 和 Zookeeper 相关依赖。

pom.xml:

<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://www.w3.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>dubbo-consumer</artifactId>
    <version>1.0.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>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
3.2 创建服务接口

src/main/java/com/example/dubbo/consumer 目录下创建一个名为 service 的包,定义服务接口 HelloService。注意,这个接口和服务提供者的接口需要保持一致。

HelloService.java:

package com.example.dubbo.consumer.service;

public interface HelloService {
    String sayHello(String name);
}
3.3 调用远程服务

src/main/java/com/example/dubbo/consumer/controller 目录下创建一个 HelloController 类,调用远程服务:

HelloController.java:

package com.example.dubbo.consumer.controller;

import com.example.dubbo.consumer.service.HelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @DubboReference(version = "1.0.0")  // 使用 DubboReference 注解引用远程服务
    private HelloService helloService;

    @GetMapping("/sayHello")
    public String sayHello(@RequestParam String name) {
        return helloService.sayHello(name);
    }
}
3.4 配置 application.yml

src/main/resources 目录下创建 application.yml 文件,配置 Dubbo 和 Zookeeper 相关信息:

application.yml:

server:
  port: 8082

dubbo:
  application:
    name: dubbo-consumer
  registry:
    address: zookeeper://127.0.0.1:2181  # Zookeeper 注册中心地址
  consumer:
    check: false  # 设置为 false,避免消费者启动时检查提供者状态
3.5 编写启动类

src/main/java/com/example/dubbo/consumer 目录下创建 DubboConsumerApplication.java 启动

类:

DubboConsumerApplication.java:

package com.example.dubbo.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DubboConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }
}

4. 启动与测试

  1. 启动 Zookeeper:确保本地已安装并启动了 Zookeeper 注册中心,或者使用 Docker 启动 Zookeeper。

  2. 启动服务提供者:运行 DubboProviderApplicationmain 方法,启动服务提供者。

  3. 启动服务消费者:运行 DubboConsumerApplicationmain 方法,启动服务消费者。

  4. 测试服务:在浏览器或 Postman 中访问 http://localhost:8082/sayHello?name=Dubbo,可以看到返回结果 Hello, Dubbo,说明服务调用成功。

5. 结论

通过上述步骤,我们完成了一个完整的 Spring Boot 集成 Dubbo 的服务提供者和消费者项目。这种集成方式简单易用,适合快速构建基于 Dubbo 的微服务应用。通过使用 Zookeeper 作为注册中心,可以实现服务的动态注册与发现,同时利用 Dubbo 强大的服务治理功能,进一步提升系统的稳定性和可靠性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值