Dubbo(53)如何在Spring Boot中集成Dubbo?

在Spring Boot中集成Dubbo可以通过Spring Boot Starter来简化配置,以下是详细的步骤和相关代码示例。

1. 引入依赖

首先,在Spring Boot项目的 pom.xml 中添加Dubbo相关的依赖:

xml 复制代码
<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- Spring Boot Starter for Dubbo -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.8</version> <!-- 使用合适的版本 -->
    </dependency>

    <!-- Spring Boot Starter for Nacos (作为配置中心和注册中心) -->
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-config-spring-boot-starter</artifactId>
        <version>0.2.10</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-discovery-spring-boot-starter</artifactId>
        <version>0.2.10</version>
    </dependency>
</dependencies>

2. 配置Dubbo

application.yml 中配置Dubbo和Nacos:

yaml 复制代码
spring:
  application:
    name: dubbo-demo-provider

  # 配置Nacos作为注册中心和配置中心
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

dubbo:
  application:
    name: dubbo-demo-provider
  registry:
    address: nacos://127.0.0.1:8848
  protocol:
    name: dubbo
    port: 20880
  scan:
    base-packages: com.example.dubbo.provider

3. 定义服务接口

定义一个服务接口,例如:

java 复制代码
package com.example.dubbo;

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

4. 实现服务提供者

在Spring Boot项目中实现服务提供者,并使用 @DubboService 注解:

java 复制代码
package com.example.dubbo.provider;

import com.example.dubbo.MyService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class MyServiceImpl implements MyService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

5. 启动类

创建Spring Boot的启动类:

java 复制代码
package com.example.dubbo;

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);
    }
}

6. 服务消费者

在另一个Spring Boot项目中配置Dubbo和Nacos,并编写服务消费者代码。

服务消费者 pom.xml

xml 复制代码
<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- Spring Boot Starter for Dubbo -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.8</version> <!-- 使用合适的版本 -->
    </dependency>

    <!-- Spring Boot Starter for Nacos (作为配置中心和注册中心) -->
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-config-spring-boot-starter</artifactId>
        <version>0.2.10</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-discovery-spring-boot-starter</artifactId>
        <version>0.2.10</version>
    </dependency>
</dependencies>

服务消费者 application.yml

yaml 复制代码
spring:
  application:
    name: dubbo-demo-consumer

  # 配置Nacos作为注册中心和配置中心
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

dubbo:
  application:
    name: dubbo-demo-consumer
  registry:
    address: nacos://127.0.0.1:8848
  scan:
    base-packages: com.example.dubbo.consumer

服务消费者代码:

java 复制代码
package com.example.dubbo.consumer;

import com.example.dubbo.MyService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class MyServiceConsumer implements CommandLineRunner {

    @DubboReference
    private MyService myService;

    @Override
    public void run(String... args) throws Exception {
        System.out.println(myService.sayHello("Dubbo"));
    }
}

服务消费者启动类:

java 复制代码
package com.example.dubbo;

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);
    }
}

7. 启动Nacos

确保Nacos配置中心和注册中心在本地或远程服务器上运行。可以从Nacos官网下载并启动Nacos。

8. 启动服务提供者和消费者

  1. 启动服务提供者:运行 DubboProviderApplication 类,确保服务成功注册到Nacos。
  2. 启动服务消费者:运行 DubboConsumerApplication 类,调用服务并检查结果。

总结

通过以上步骤,我们成功地在Spring Boot中集成了Dubbo,并实现了服务提供者和消费者的示例。关键步骤包括:

  1. 引入依赖 :在Spring Boot项目的 pom.xml 中添加Dubbo相关依赖。
  2. 配置Dubbo :在 application.yml 中配置Dubbo和Nacos。
  3. 定义服务接口:定义服务接口。
  4. 实现服务提供者 :在Spring Boot项目中实现服务提供者,并使用 @DubboService 注解。
  5. 编写启动类:创建Spring Boot的启动类。
  6. 配置服务消费者:在另一个Spring Boot项目中配置Dubbo和Nacos,并编写服务消费者代码。
  7. 启动Nacos:确保Nacos配置中心和注册中心在本地或远程服务器上运行。
  8. 启动服务提供者和消费者:运行服务提供者和消费者的启动类,调用服务并检查结果。

通过这些步骤,可以有效地在Spring Boot中集成Dubbo,实现分布式服务的开发和调用。

相关推荐
QQ_21696290961 分钟前
Spring Boot 养老院管理系统:从入住、护理到费用结算的全流程实现(源码可领)
java·spring boot·后端
万少2 小时前
DeepSeek-V4-Flash 正式版上线了,但这 3 个坑我帮你提前踩了
前端·javascript·后端
明月_清风2 小时前
🚀 Palantir Foundry 本体论实战:当 Ontology 从"知识图谱"进化为"企业操作系统"
前端·后端
明月_清风3 小时前
从概念到代码:用 Ontology 构建你的第一个知识图谱
前端·后端
Python私教3 小时前
Django 6.1 邮件配置大改:旧项目如何平稳升级?
后端·python·django
Python私教3 小时前
Django 6.1 升级避坑:数据库版本不兼容怎么解决?
后端·python·django
Python私教3 小时前
Django 接口开发实测:新手还需要使用 REST 框架吗?
后端·python·django
techdashen3 小时前
Go设计取舍之三: 0.3ns每次的错误Benchmark
开发语言·后端·golang
techdashen4 小时前
Go设计取舍之四: map不变时能否并发修改不同value
开发语言·后端·golang
朱容zr3331335 小时前
为什么推荐使用自增主键?使用UUID作为主键的优缺点是什么?
java·运维·数据库·后端·mysql·面试·性能优化