使用Dubbo实现微服务之间的高效通信

目录

一、RPC与Dubbo

二、Springboot整合Dubbo

服务端实现

消费端实现


一、RPC与Dubbo

RPC(Remote Procedure Call)是指远程过程调用。

常见的RPC框架有Dubbo (Alibaba )、gRPC (Google)、Thrift(Facebook)。

其中

Dubbo是一款Java RPC框架,致力于提供高性能的RPC远程服务调用方案。以帮助开发人员快速构建高效的分布式系统。Alibaba 是其主要贡献者。

二、Springboot整合Dubbo

确保项目中已经存在dubbo依赖,可以直接添加spring-cloud-alibaba-dependencies依赖到项目中,spring-cloud-alibaba-dependencies依赖于spring-cloud-starter-dubbo,spring-cloud-starter-dubbo依赖于dubbo。

XML 复制代码
<!-- SpringCloud Alibaba 微服务 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

服务端实现

在服务端bootstrap.yml中添加配置以下配置

XML 复制代码
# Dubbo        
dubbo:
   application:
      name: diggl-base-system
      qos-enable: false #不启用qos,启用的话会报端口被占用
   scan: # 指定 Dubbo 服务实现类的扫描基准包
      base-packages: com.diggl.base.system.service
   protocol: # 协议
      name: dubbo
      port: -1 # rpc需要一个额外的端口,-1 表示端口随机
   registry: # 注册中心
      address: nacos://localhost:8848?username=diggl&password=diggl
   consumer:
     check: false   # 引用服务没有注册时,不报错
     timeout: 6000

@DubboService注解用在类上,告诉Dubbo这个类是一个服务提供者,Dubbo会自动检测这个类并注册到注册中心。

java 复制代码
/**
 * @description 远程用户Service实现类
 */
@DubboService
public class RemoteUserServiceImpl implements RemoteUserService {
    // 方法
}

消费端实现

在消费端bootstrap.yml中添加配置以下配置

XML 复制代码
# Dubbo        
dubbo:
   application:
      name: diggl-auth
      qos-enable: false #不启用qos,启用的话会报端口被占用
   protocol:
      name: dubbo    
      port: -1 # rpc需要一个额外的端口,-1 表示端口随机
   registry:
      address: nacos://localhost:8848?username=diggl&password=diggl
   cloud:
      subscribed-services: diggl-base-system,diggl-apigateway-service
   consumer:
      check: false
      timeout: 60000

@DubboReference注解告诉Dubbo当前类是一个服务消费者,Dubbo会自动检测这个类并从注册中心获取被注解的服务提供者对象的信息,并建立与服务提供者的通信。(@Reference注解是Dubbo早期的版本中使用的)

java 复制代码
/**
 * 登录校验
 */
@Component
public class SysLoginService {
    @DubboReference
    private RemoteUserService remoteUserService;
    // 方法
}
相关推荐
Mr.朱鹏3 小时前
大模型入门学习路径(Java开发者版)下
java·python·学习·微服务·langchain·大模型·llm
时光追逐者5 小时前
一个基于 .NET 开源、功能强大的分布式微服务开发框架
分布式·微服务·开源·c#·.net·.net core
拾忆,想起9 小时前
单例模式深度解析:如何确保一个类只有一个实例
前端·javascript·python·微服务·单例模式·性能优化·dubbo
阿萨德528号11 小时前
Maven 项目构建笔记 - 单体应用与简单微服务
笔记·微服务·maven
Coder_Boy_11 小时前
业务导向型技术日志记录(2)
java·人工智能·驱动开发·微服务
沉迷技术逻辑11 小时前
微服务保护和分布式事务
分布式·微服务·架构
野蛮人6号11 小时前
黑马微服务 p23Docker02 docker的安装 如何正确安装docker,黑马微服务给的文档不行了,如何正确找到解决方法
java·docker·微服务·架构
小毅&Nora12 小时前
【后端】【微服务网关】 ① 全景图:2025年主流网关选型、原理与实战指南
网关·微服务·架构
野蛮人6号12 小时前
黑马微服务报错以及解决前23节课
spring boot·微服务·mybatis
小毅&Nora12 小时前
【AI微服务】【Spring AI Alibaba】 ③ Spring AI Alibaba Agent 核心执行流程源码解析
人工智能·微服务·spring ai