当前位置: 首页 > article >正文

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

目录

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 {@Beanpublic 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.lryc.cn/news/2401927.html

相关文章:

  • matlab基于GUI实现水果识别
  • 视频爬虫的Python库
  • 深度学习N2周:构建词典
  • Qt多线程访问同一个数据库源码分享(基于Sqlite实现)
  • 多类别分类中的宏平均和加权平均
  • 电子电路:什么是扩散电容?
  • 贪心算法应用:装箱问题(FFD问题)详解
  • 机器学习的数学基础:假设检验
  • 余氯传感器在智慧水务系统中如何实现IoT集成
  • 操作系统学习(九)——存储系统
  • 服务器安装软件失败或缺依赖怎么办?
  • linux nm/objdump/readelf/addr2line命令详解
  • 006网上订餐系统技术解析:打造高效便捷的餐饮服务平台
  • [10-2]MPU6050简介 江协科技学习笔记(22个知识点)
  • 基于行为分析的下一代安全防御指南
  • Redis持久化机制详解:RDB与AOF的深度剖析
  • 记录一次 apt-key curl导入失败的处理方式
  • Spring Boot 3.X 下Redis缓存的尝试(二):自动注解实现自动化缓存操作
  • 【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡
  • C:\Users\中文名修改为英文名
  • Web 架构相关文章目录(持续更新中)
  • Redis 安装配置和性能优化
  • 购物商城网站 Java+Vue.js+SpringBoot,包括商家管理、商品分类管理、商品管理、在线客服管理、购物订单模块
  • PostgreSQL 安全纵深防御:从权限到加密
  • 【美团技术团队】从实际案例聊聊Java应用的GC优化
  • 在word中点击zotero Add/Edit Citation没有反应的解决办法
  • 整合swagger,以及Knife4j优化界面
  • Unity | AmplifyShaderEditor插件基础(第四集:简易shader)
  • 【安全攻防与漏洞】​​量子计算对HTTPS的威胁:后量子密码学进展
  • linux C语言中的动态库 静态库说明