基于rpc框架Dubbo实现的微服务转发实战

news2025/7/27 20:44:23

目录

rpc微服务模块

导入依赖

配置dubbo

注解 开启Dubbo

Dubbo的使用

特殊点 并没有使用 @ Reference 注入


微服务之间调用

可以选用Http 也可以Dubbo

我们 Dubbo 的实现需要一个注册中心

我作为一个服务的提供者 我需要把我的服务注册到注册中心去

调用方需要注册中心去把服务拉过来

注册中心是一个桥梁

我们之前是使用nacos作为配置中心的

rpc微服务模块

我们定义一个微服务模块叫rpc

导入依赖

 <dependencies>
        <!--   dubbo   -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>

        <dependency>
            <groupId>cn.hollis</groupId>
            <artifactId>nft-turbo-base</artifactId>
        </dependency>

    </dependencies>

配置dubbo

一开始是一个检查 检查dubbo调用者是否存在

# Dubbo 配置的根节点,用于配置 Dubbo 框架的相关参数
dubbo:

  # 消费者配置,用于设置 Dubbo 服务消费者的相关参数
  consumer:
    # 服务调用超时时间,单位为毫秒。这里设置为 3000 毫秒,即 3 秒。
    # 若服务调用在 3 秒内未返回结果,将抛出超时异常
    timeout: 3000
    # 启动时是否检查提供者是否存在。设置为 false 表示启动时不检查,
    # 即使没有可用的提供者,消费者也能正常启动
    check: false

  # 协议配置,用于设置 Dubbo 服务通信所使用的协议
  protocol:
    # 协议名称,这里使用 Dubbo 原生协议进行服务调用
    name: dubbo
    # 协议端口号。设置为 -1 表示自动选择一个可用端口
    port: -1

  # 注册中心配置,用于配置 Dubbo 服务的注册与发现信息
  registry:
    # 注册中心地址,使用 Nacos 作为注册中心。
    # ${nft.turbo.nacos.server.url} 是一个占位符,实际值会从配置文件中获取
    address: nacos://${nft.turbo.nacos.server.url}
    # 注册中心的额外参数配置
    parameters:
      # Nacos 命名空间,用于隔离不同环境或项目的服务。
      # ${nft.turbo.dubbo.nacos.namespace} 是占位符,实际值从配置文件获取
      namespace: ${nft.turbo.dubbo.nacos.namespace}
      # Nacos 分组,用于对服务进行分组管理。
      # ${nft.turbo.dubbo.nacos.group} 是占位符,实际值从配置文件获取
      group: ${nft.turbo.dubbo.nacos.group}

  # 应用配置,用于设置当前 Dubbo 应用的相关信息
  application:
    # 应用名称,使用 Spring 应用的名称。
    # ${spring.application.name} 是占位符,实际值从 Spring 配置文件获取
    name: ${spring.application.name}
    # 是否启用 QoS(Quality of Service)功能。QoS 提供了一个命令行工具,
    # 可用于在运行时管理 Dubbo 应用,如查看服务列表、关闭服务等。设置为 true 表示启用
    qos-enable: true
    # QoS 是否允许外部 IP 访问。设置为 false 表示只允许本地 IP 访问 QoS 服务,
    # 增强了安全性,防止外部非法访问
    qos-accept-foreign-ip: false

我们使用命名空间给一系列调用中心归类 用于隔离不同环境或项目的服务

注解 开启Dubbo

@EnableDubbo
package cn.hollis.nft.turbo.rpc.config;

import cn.hollis.nft.turbo.rpc.facade.FacadeAspect;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Rpc 配置
 *
 * @author hollis
 */
@EnableDubbo
@Configuration
public class RpcConfiguration {

    @Bean
    public FacadeAspect facadeAspect() {
        return new FacadeAspect();
    }
}

我们接下来的引用

jar包 + 配置

Dubbo的使用

注册的话我们直接使用 @ DubboService 注解即可

这个注解说明的当前类不仅仅是一个 Service

而且要注册到 注册中心里面去 用Dubbo进行一个调用

当你要进行远程调用的时候

你可以使用 @ DubboReference 注解 去调用服务提供者

特殊点 并没有使用 @ Reference 注入

绕一把

package cn.hollis.nft.turbo.user.infrastructure;

import cn.hollis.nft.turbo.api.chain.service.ChainFacadeService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 该配置类用于配置 Dubbo 服务引用,并将其注册为 Spring Bean。
 * 主要负责引用链服务接口,并在 Spring 容器中管理该服务实例。
 *
 * @author Hollis
 */
@Configuration
public class UserDubboConfiguration {

    /**
     * 使用 Dubbo 的 @DubboReference 注解引用远程的 ChainFacadeService 服务。
     * version = "1.0.0" 表示引用版本号为 1.0.0 的服务。
     * 该注解会将远程服务代理注入到当前字段中,以便在本地使用。
     */
    @DubboReference(version = "1.0.0")
    private ChainFacadeService chainFacadeService;

    /**
     * 定义一个 Spring Bean,Bean 的名称默认为方法名 "chainFacadeService"。
     * @ConditionalOnMissingBean 注解表示只有当 Spring 容器中不存在名称为 "chainFacadeService" 的 Bean 时,
     * 才会执行此方法来创建该 Bean。
     * 该方法返回之前通过 @DubboReference 注解注入的 ChainFacadeService 实例,
     * 从而将 Dubbo 引用的服务注册为 Spring Bean,方便在 Spring 应用中使用。
     *
     * @return ChainFacadeService 实例
     */
    @Bean
    @ConditionalOnMissingBean(name = "chainFacadeService")
    public ChainFacadeService chainFacadeService() {
        return chainFacadeService;
    }
}

为了单测...

如果单元测试的话 还是会远程代理bean进行调用

是不能mock掉的

而autowired是可以进行mock的

@ MockBean就行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2401927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习N2周:构建词典

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本周任务&#xff1a;使用N1周的.txt文件构建词典&#xff0c;停用词请自定义 1.导入数据 from torchtext.vocab import build_vocab_from_iterator from co…

贪心算法应用:装箱问题(FFD问题)详解

贪心算法应用&#xff1a;装箱问题(FFD问题)详解 1. 装箱问题概述 装箱问题(Bin Packing Problem)是计算机科学和运筹学中的一个经典组合优化问题。问题的描述如下&#xff1a; 给定一组物品&#xff0c;每个物品有一定的体积&#xff0c;以及若干容量相同的箱子&#xff0c…

操作系统学习(九)——存储系统

一、存储系统 在操作系统中&#xff0c;存储系统&#xff08;Storage System&#xff09; 是计算机系统的核心组成部分之一&#xff0c;它负责数据的存储、组织、管理和访问。 它不仅包括物理设备&#xff08;如内存、硬盘&#xff09;&#xff0c;还包括操作系统提供的逻辑抽…

服务器安装软件失败或缺依赖怎么办?

服务器在安装软件时失败或提示缺少依赖&#xff0c;是运维中非常常见的问题。这个问题大多发生在 Linux 云服务器环境&#xff0c;原因和解决方法也有共性。以下是详细说明和解决建议&#xff1a; &#x1f9e0; 一、常见原因分析 问题类型描述&#x1f50c; 软件源不可用服务器…

006网上订餐系统技术解析:打造高效便捷的餐饮服务平台

网上订餐系统技术解析&#xff1a;打造高效便捷的餐饮服务平台 在数字化生活方式普及的当下&#xff0c;网上订餐系统成为连接餐饮商家与消费者的重要桥梁。该系统以菜品分类、订单管理等模块为核心&#xff0c;通过前台展示与后台录入的分工协作&#xff0c;为管理员和会员提…

[10-2]MPU6050简介 江协科技学习笔记(22个知识点)

1 2 3 欧拉角是描述三维空间中刚体或坐标系之间相对旋转的一种方法。它们由三个角度组成&#xff0c;通常表示为&#xff1a; • 偏航角&#xff08;Yaw&#xff09;&#xff1a;绕垂直轴&#xff08;通常是z轴&#xff09;的旋转&#xff0c;表示偏航方向的变化。 • 俯仰角&a…

Spring Boot 3.X 下Redis缓存的尝试(二):自动注解实现自动化缓存操作

前言 上文我们做了在Spring Boot下对Redis的基本操作&#xff0c;如果频繁对Redis进行操作而写对应的方法显示使用注释更会更高效&#xff1b; 比如&#xff1a; 依之前操作对一个业务进行定入缓存需要把数据拉取到后再定入&#xff1b; 而今天我们可以通过注释的方式不需要额外…

【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡

【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡 一、项目背景与转型原因 1.1 原定计划的变更 本系列教程最初规划是开发即构美颜SDK的UTS插件&#xff0c;但由于甲方公司内部战略调整&#xff0c;原项目被迫中止。考虑到&#xff1a; 技术…

C:\Users\中文名修改为英文名

C:\Users\中文名修改为英文名 背景操作步骤 背景 买了台新电脑&#xff0c;初始化好不知道啥操作把自己的登录用户名改成了中文&#xff0c;有些安装的软件看见有中文直接就水土不服了。 操作步骤 以下称中文用户名为张三。 正常登录张三用户 进入用户管理页面修改用户名&a…

购物商城网站 Java+Vue.js+SpringBoot,包括商家管理、商品分类管理、商品管理、在线客服管理、购物订单模块

购物商城网站 JavaVue.jsSpringBoot&#xff0c;包括商家管理、商品分类管理、商品管理、在线客服管理、购物订单模块 百度云盘链接&#xff1a;https://pan.baidu.com/s/10W0kpwswDSmtbqYFsQmm5w 密码&#xff1a;68jy 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在…

在word中点击zotero Add/Edit Citation没有反应的解决办法

重新安装了word插件 1.关掉word 2.进入Zotero左上角编辑-引用 3.往下滑找到Microsoft Word&#xff0c;点重新安装加载项

整合swagger,以及Knife4j优化界面

因为是前后端项目&#xff0c;需要前端的参与&#xff0c;所以一个好看的接口文档非常的重要 1、引入依赖 美化插件其中自带swagger的依赖了 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter&…

Unity | AmplifyShaderEditor插件基础(第四集:简易shader)

一、&#x1f44b;&#x1f3fb;前言 大家好&#xff0c;我是菌菌巧乐兹~本节内容主要讲一下&#xff0c;第一个用ASE的shader。 我们用通用的光照模版吧。&#xff08;universal-通用/Lit-光照&#xff09; 通用的光照模版 如果你尝试建设了&#xff0c;会发现Universal这个…

linux C语言中的动态库 静态库说明

静态库 gcc -fpic -c add.c sub.c 这个命令之后会得到 add.o 于 sub.o (-c 只编译不链接) ar rcs mymath.a add.o sub.o 将编译好的文件编译成.a静态库用于调用 在使用中 gcc main.c -I../include ../lib/mymarh.a -0 mytest 需要这个函数的声明放在include文件下&#xf…

Flash烧录速度和加载配置速度(纯FPGA ZYNQ)

在工程综合完成或者implement完成后&#xff0c;打开综合设计或者实现设计。 toots--->Edit Device Properties--->打开比特流设置 将bitstream进行压缩 上图中&#xff0c;时钟频率选择的档位有限&#xff0c;最大为66MHZ io的bus width可以设置为x1,x2,x4 vivado在设计…

解构与重构:PLM 系统如何从管理工具进化为创新操作系统?

在智能汽车、工业物联网等新兴领域的冲击下&#xff0c;传统产品生命周期管理&#xff08;PLM&#xff09;系统正在经历前所未有的范式转换。当某头部车企因 ECU 软件与硬件模具版本失配导致 10 万辆智能电车召回&#xff0c;损失高达 6 亿美元时&#xff0c;这场危机不仅暴露了…

Redis:介绍和认识,通用命令,数据类型和内部编码,单线程模型

介绍和认识 Redis是一个基于内存的&#xff0c;高性能的&#xff0c;支持许多数据类型的NoSQL数据库&#xff0c;可以持久化&#xff0c;也支持分布式。 在许多的互联网产品中&#xff0c;对于数据库的访问速度要求很高&#xff0c;例如Mysql数据库无法满足其要求&#xff0c…

嵌入式开发之STM32学习笔记day20

STM32F103C8T6 PWR电源控制 1 PWR简介 PWR&#xff08;Power Control&#xff09;电源控制单元是STM32微控制器中一个重要的组成部分&#xff0c;它负责管理系统的电源管理功能&#xff0c;以优化功耗并提高效率。PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编…

专业级PDF转CAD解决方案

PDF 文件因其出色的便携性和稳定性&#xff0c;已成为许多用户的首选格式。但在涉及图像编辑或精细调整时&#xff0c;CAD 文件显然更具优势。 这款 CAD 图纸转换工具&#xff0c;界面清爽、操作直观&#xff0c;是处理图纸文件的理想助手。 它不仅支持不同版本 CAD 文件之间…

STM32 智能小车项目 两路红外循迹模块原理与实战应用详解

在嵌入式系统、机器人、智能设备等场景中&#xff0c;红外反射型光电传感器 被广泛应用于黑白识别、障碍检测、物体计数、位置判断等任务。其中&#xff0c;RPR220 是一款性能稳定、体积小巧的红外光电收发管&#xff0c;本文将详细介绍其工作原理、引脚参数、接线说明以及典型…