java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring Cloud微服务调用Dubbo

Spring Cloud微服务之间调用Dubbo的详细过程

作者:Lucas-689

SpringCloudAlibabaDubbo是阿里巴巴开源的Dubbo与SpringCloud的深度集成方案,本文介绍Spring Cloud微服务之间调用Dubbo的详细过程,感兴趣的朋友跟随小编一起看看吧

Spring Cloud Alibaba Dubbo 是阿里巴巴开源的 Dubbo 微服务框架Spring Cloud 生态 的深度集成方案。它将 Dubbo 的高性能 RPC 能力与 Spring Cloud 的微服务治理、配置管理和服务注册发现功能有机结合,帮助开发者快速构建可扩展、可维护的微服务系统。

核心特点

适用场景

一、项目结构

dubbo-boot4-demo
├── pom.xml                         ← 父工程
├── dubbo-provider-api
│   └── pom.xml
│   └── src/main/java
│       └── com/example/api
│           └── UserService.java
├── dubbo-provider
│   └── pom.xml
│   └── src/main/java
│       └── com/example/provider
│           ├── ProviderApplication.java
│           └── service
│               └── UserServiceImpl.java
│   └── src/main/resources
│       └── application.yml
└── dubbo-consumer
    └── pom.xml
    └── src/main/java
        └── com/example/consumer
            ├── ConsumerApplication.java
            └── controller
                └── UserController.java
    └── src/main/resources
        └── application.yml

二、父工程 pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>dubbo-boot4-demo</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <modules>
        <module>dubbo-provider-api</module>
        <module>dubbo-provider</module>
        <module>dubbo-consumer</module>
    </modules>
    <properties>
        <java.version>25</java.version>
        <spring-boot.version>4.0.0</spring-boot.version>
        <dubbo.version>3.3.2</dubbo.version>
        <nacos.version>2.4.1</nacos.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot BOM -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Dubbo BOM -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

三、API 模块(公共接口)

dubbo-provider-api/pom.xml

<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>dubbo-boot4-demo</artifactId>
        <version>1.0.0</version>
    </parent>
    <artifactId>dubbo-provider-api</artifactId>
    <dependencies>
        <!-- 只放接口,不依赖任何实现 -->
    </dependencies>
</project>

UserService.java

package com.example.api;
public interface UserService {
    String getUserName(Long id);
}

四、Provider 服务端

dubbo-provider/pom.xml

<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>dubbo-boot4-demo</artifactId>
        <version>1.0.0</version>
    </parent>
    <artifactId>dubbo-provider</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>dubbo-provider-api</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>${nacos.version}</version>
        </dependency>
    </dependencies>
</project>

UserServiceImpl.java

package com.example.provider.service;
import com.example.api.UserService;
import org.apache.dubbo.config.annotation.DubboService;
@DubboService
public class UserServiceImpl implements UserService {
    @Override
    public String getUserName(Long id) {
        return "user-" + id;
    }
}

application.yml

spring:
  application:
    name: dubbo-provider   # Spring Boot 应用名,用于标识当前服务(生产者)
server:
  port: 8080                # HTTP 服务端口(如果有 REST 接口)
dubbo:
  application:
    name: ${spring.application.name}   # Dubbo 应用名,与 Spring Boot 名一致
  protocol:
    name: dubbo       # Dubbo 协议
    port: 20880       # Dubbo 服务端口,生产环境建议固定端口
  registry:
    address: nacos://127.0.0.1:8848   # 注册中心地址
  provider:
    timeout: 5000       # 默认超时时间(毫秒)
    retries: 0          # 默认不重试,生产环境可根据业务调整

四、Consumer 模块

dubbo-consumer/pom.xml

<project>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>dubbo-boot4-demo</artifactId>
        <version>1.0.0</version>
    </parent>
    <artifactId>dubbo-consumer</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>dubbo-provider-api</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>${nacos.version}</version>
        </dependency>
    </dependencies>
</project>

UserController.java

package com.example.consumer.controller;
import com.example.api.UserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
    @DubboReference
    private UserService userService;
    @GetMapping("/user")
    public String user() {
        return userService.getUserName(1L);
    }
}

application.yml

spring:
  application:
    name: dubbo-consumer   # Spring Boot 应用名,用于标识消费者
server:
  port: 8081               # HTTP 服务端口(如果有 REST 接口)

dubbo:
  application:
    name: ${spring.application.name}   # Dubbo 应用名
  registry:
    address: nacos://127.0.0.1:8848   # 注册中心地址
  consumer:
    check: false           # 启动时不检查服务提供者是否存在(开发环境用)
    timeout: 5000          # 调用超时时间(毫秒)
    retries: 2             # 调用失败重试次数
    loadbalance: roundrobin  # 负载均衡策略:轮询

到此这篇关于Spring Cloud微服务之间调用Dubbo的文章就介绍到这了,更多相关Spring Cloud微服务调用Dubbo内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文