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

项目内部调用的远程接口开发

编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中,实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用,而不是直接暴露给外部用户或前端。

  1. 项目内部的远程接口统一放在api工程

  2. 首先进入api编写接口,注意使用@FeignClient注解

  3. 进入服务提供者微服务,编写接口实现类

1. 在 api 工程中编写接口

在 api 工程中,定义远程调用的接口。这个接口将通过 Feign 进行服务调用。接口通过 @FeignClient 注解进行标注,指定服务名称和请求的路径。

package com.jzo2o.api.user;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;// 通过 @FeignClient 指定远程服务的名称 user-service
@FeignClient(name = "user-service", path = "/user/api/users")
public interface UserServiceClient {// 定义要调用的远程服务的接口,@GetMapping 表示通过 GET 方法访问@GetMapping("/{id}")User getUserById(@PathVariable("id") Long id);
}
  • @FeignClient:表示这是一个 Feign 客户端,name 为服务提供者的名称,url 指定服务的地址(可省略,使用服务发现时)。
  • @GetMapping("/api/users/{id}"):声明需要调用的接口路径。

此接口只定义远程调用的方法,不需要具体实现,Feign 会自动为它生成代理类。

2. 在服务提供者微服务中编写接口实现类

在服务提供者(即实际提供业务功能的微服务)中,编写接口的实现类来处理请求。

服务提供者:UserService 微服务

在服务提供者的微服务中实现接口逻辑。比如处理用户的查询接口。

package com.jzo2o.user.controller;import org.springframework.web.bind.annotation.*;
import com.jzo2o.user.model.User;
import com.jzo2o.user.service.UserService;
import javax.annotation.Resource;@RestController
@RequestMapping("/api/users")
public class UserController {@Resourceprivate UserService userService;// 实现查询用户的接口@GetMapping("/{id}")public User getUserById(@PathVariable("id") Long id) {// 调用业务层的方法处理查询用户的逻辑return userService.findUserById(id);}
}

3. 在服务消费者微服务中调用远程接口

在服务消费者中(即调用方微服务),你可以通过 Feign 客户端直接调用刚才定义的接口,而不需要自己处理 HTTP 请求的逻辑。

服务消费者:调用 UserServiceClient 接口

在需要调用用户服务的地方注入 UserServiceClient 并进行调用:

package com.jzo2o.order.service;import com.jzo2o.api.user.UserServiceClient;
import com.jzo2o.api.user.User;
import org.springframework.stereotype.Service;import javax.annotation.Resource;@Service
public class OrderService {@Resourceprivate UserServiceClient userServiceClient;// 通过 UserServiceClient 调用远程的用户服务public User getUserInfo(Long userId) {// 调用 api 中定义的远程服务接口return userServiceClient.getUserById(userId);}
}

4. 为什么要专门写一个内部调用的远程接口

  • 解耦代码:将远程调用的接口统一放在 api 工程中,方便管理,并且消费者只需调用该接口,不需要关心具体的实现逻辑。这保证了服务间的低耦合。

  • 代码复用:通过 Feign 客户端,接口声明可以在多个微服务中复用,而无需为每个服务编写重复的 HTTP 请求逻辑。

  • 简化开发:Feign 提供了声明式的调用方式,极大简化了与远程服务交互时的代码开发。无需手动编写 HTTP 请求、解析响应等,降低了代码的复杂度。

  • 便于维护:如果需要对远程接口进行修改或维护,只需修改 api 中的接口定义,其他服务可以自动应用这些变化,减少了重复修改的风险。

  • 安全性:内部调用的接口通常并不希望直接暴露给外部用户或前端。这是因为:

    • 内部接口往往传输的内容更加敏感,涉及内部系统之间的数据交换。
    • 前端接口通常需要经过鉴权、校验、限流等多层保护,而内部接口可以简化这些流程,避免不必要的开销。

相关文章:

项目内部调用的远程接口开发

编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中,实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用,而不是直接暴露给外部用户或前端。 项目内部的远程接口统一放在api工程 首先进入api编写接口&#x…...

影响IP代理池稳定性的因素有哪些?

IP代理池在提供网络服务时,稳定性是一项决定性指标。多个外部和内部因素可能会影响这个稳定性,因此深入理解这些影响因素,可以帮助优化IP代理池的性能与服务质量。 1. IP来源质量 纯净度与使用频次:优质的IP来源常常被描述为纯净…...

基于Prometheus和Grafana的现代服务器监控体系构建

构建一个基于 Prometheus 和 Grafana 的现代服务器监控体系涉及多个步骤。以下是大体的流程和步骤说明: 1. Prometheus 监控系统 Prometheus 是一个开源的系统监控和报警工具,专门设计用于抓取时间序列数据。 1.1 Prometheus 的安装 Docker 安装 Prom…...

原生 input 中的 “type=file“ 上传文件

目标&#xff1a;实现文件上传功能 原型图&#xff1a; HTML部分&#xff1a; <div class"invoice-item"><div class"invoice-title">增值税专用发票</div><div class"invoice-box"><el-form-item label"标准…...

【Unity新闻】Unity的产品命名变化

快速回顾一下Unity产品命名的调整。 在2023年 Unity就宣布版本命名的变化&#xff0c;将使用Unity 6作为最新版本的命名。 具体的规则&#xff0c;在论坛里进行了说明。 以后正式的LTS版本就是Unity 6&#xff0c;将在2024年末发布。 而不管是之前的Runtime费还是今天的费用…...

《PostMan(一):配置全局令牌》

文章目录 一、配置全局token1、设置2、添加全局3、添加全局变量名称4、选中全局&#xff0c;并查看5、添加赋值脚本6、配置令牌取值7、即可成功获取用户信息 一、配置全局token 1、设置 2、添加全局 3、添加全局变量名称 4、选中全局&#xff0c;并查看 5、添加赋值脚本 // 把…...

如何理解Configurational entropy

Configurational entropy 是热力学和统计力学中的一个重要概念&#xff0c;它描述的是系统中由于其微观状态排列&#xff08;即配置&#xff09;导致的不确定性或混乱程度。不同于热力学中的热熵&#xff08;thermal entropy&#xff09;&#xff0c;它特指那些与系统中的粒子、…...

H5端接入萤石监控

官方文档 EZOPEN协议 下滑至-平台架构 web/h5端使用文档 <template><div :id"video-container${index}${index2}" class"w-full bg-black"></div> </template><script>export default {data() {return {EZVIZAToken:…...

SSD1306 OLED显示屏驱动方案简介

SSD1306是一种常见的单色OLED(有机发光二极管)显示屏驱动芯片。以下从它的基本特点、工作原理和应用领域进行详细介绍&#xff1a; 一、基本特点 1. 尺寸与分辨率&#xff1a; SSD1306芯片支持多种尺寸的OLED显示屏&#xff0c;常见的有0.96寸、1.3寸等。不同尺寸的屏幕具有不…...

React18快速入门

需要先安装并配置React相关的工具和插件 下载安装Node.js&#xff0c;这里以MacOS Node.js v22.6.0为例 终端命令行检查是否安装成功 node -v npm -vNode.js快速入门 npm设置镜像源 #设置为阿里镜像源 npm config set registry https://registry.npmmirror.com #查看是否生…...

Day11笔记-字典基本使用系统功能字典推导式

二、字典【重点掌握】 1.概念 列表和元组的使用缺点&#xff1a;当存储的数据要动态添加、删除的时候&#xff0c;我们一般使用列表&#xff0c;但是列表有时会遇到一些麻烦,定位元素比较麻烦 # 一个列表/元组保存5个学生的成绩&#xff0c; score_list [66,100,70,78,99] sc…...

Ribbon (WPF)

Ribbon (WPF) 在本文中主要包含以下内容&#xff1a; Ribbon组件和功能应用程序菜单快速访问工具栏增强的工具提示 Ribbon是一个命令栏&#xff0c;它将应用程序的功能组织到应用程序窗口顶部的一系列选项卡中。Ribbon用户界面(UI)增加了特性和功能的可发现性&#xff0c;使用…...

解锁编程潜力,从掌握GitHub开始

目录&#xff1a; 一、搜索开源项目 1、什么是Git 2、Github常用词含义 3、一个完整的项目界面 4、使用Github搜索项目 1&#xff09;in关键词 2&#xff09;star或fork数量去查找 3&#xff09;awesome加强搜索 二、访问速度慢的解决 1、使用网易UU加速器 2、使用…...

HTML转义字符对照表

HTML特殊字符转义对照表一 字符十进制转义字符字符十进制转义字符"&quot;&&amp;<<<&agrave;>>>不断开空格 ?¡¡&Aacute;&aacute;&#226&acirc;&#xffe0;¢¢&circ;&#xffe1;££&…...

【zabbix监控软件(配置及常用键值)】

监控软件–zabbix 同类产品&#xff1a;nagios、cacti 简介&#xff1a;能够部署企业级监控平台。 监控范围 1&#xff09;zabbix SNMP 监控网络设备 防火墙、交换机 2&#xff09;zabbix agent 监控 服务器&#xff1a;raid插槽 CPU 内存插槽 温度 风扇 操作系统&#xff1…...

98、RS485全自动收发电路入坑笔记

因为RS485采用叉分信号&#xff0c;只支持半双工。正常的RS485芯片驱动电路是需要GPIO来切换发送和接收模式。如下图所示&#xff0c;一般的RS485电平转换芯片都有RE/DE脚&#xff0c;用来切换收发模式。 例如这篇推荐&#xff1a;芯片RS485自动收发电路常见问题与应对策略 但…...

单机快速部署开源、免费的分布式任务调度系统——Apache DolphinScheduler

本文主要为大家介绍Apache DolphinScheduler的单机部署方式&#xff0c;方便大家快速体验。 环境准备 需要Java环境&#xff0c;这是一个老生常谈的问题&#xff0c;关于Java环境的安装与配置期望大家都可以熟练掌握。 验证java环境 java -version 下载安装包并解压 使用wg…...

【运维监控】Prometheus+grafana监控zookeeper运行情况

运维监控系列文章入口&#xff1a;【运维监控】系列文章汇总索引 文章目录 一、prometheus二、grafana三、prometheus集成grafana监控zookeeper1、修改zookeeper配置2、修改prometheus配置3、导入grafana模板4、验证 本示例通过zookeeper自带的监控信息暴露出来&#xff0c;然后…...

【C++二分查找】2560. 打家劫舍 IV

本文涉及的基础知识点 C二分查找 LeetCode2560. 打家劫舍 IV 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统&#xff0c;所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在…...

位段、枚举、联合

位段 在一个结构体中以位&#xff08;最小单位&#xff09;为单位来指定其成员所占的内存长度。位段成员名后面有一个冒号&#xff0c;冒号后有一个数字&#xff08;这个数字是小于等于这个成员所占的位&#xff09;。 typedef struct S {char a : 2;//8char b : 8;//8char c …...

化妆镜前扮精致,脊柱 “被扯得变形错位”!

低头化妆、整理发型、涂抹护肤品、搭配饰品&#xff0c;颈腰椎损伤风险显著。低头时颈椎前伸角度过大&#xff0c;肌肉持续紧张痉挛&#xff1b;久坐化妆时腰部缺乏支撑&#xff0c;腰椎同步受累&#xff1b;反复低头抬头动作&#xff0c;导致颈肩腰背肌肉协同疲劳。长期如此&a…...

【配电网故障定位】基于改进粒子群算法的配电网故障定位研究附Matlab代码参考文献

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

从约束到报告:一份给Synopsys PT新手的保姆级命令行操作指南

从约束到报告&#xff1a;一份给Synopsys PT新手的保姆级命令行操作指南 第一次打开PrimeTime&#xff08;PT&#xff09;时&#xff0c;面对黑底白字的命令行界面和密密麻麻的时序报告&#xff0c;大多数数字IC工程师都会感到手足无措。作为Synopsys的旗舰级静态时序分析&…...

PROFINET通信进阶:S7-1200作为服务器与S7-200 SMART的高效数据交换

PROFINET通信进阶&#xff1a;S7-1200作为服务器与S7-200 SMART的高效数据交换 在工业自动化领域&#xff0c;PROFINET通信协议因其高实时性和稳定性而广受青睐。当S7-1200 PLC作为服务器与S7-200 SMART进行数据交换时&#xff0c;如何优化通信性能成为工程师们关注的焦点。本文…...

一般非线性最优问题的迭代解法思路

1.迭代方法在经典最优化极值问题中&#xff0c;解析法虽然具有概念简明&#xff0c;计算精确等优点&#xff0c;但因只能适用于简单或特殊问题的寻优&#xff0c;对于复杂的工程实际问题通常无能为力&#xff0c;一般采用迭代算法&#xff0c;逐渐逼近最优解。​ 最优化问题的迭…...

Protocol Buffer 入门:跨平台的高效序列化神器

&#x1f525;个人主页&#xff1a;Milestone-里程碑 ❄️个人专栏: <<力扣hot100>> <<C>><<Linux>> <<Git>><<MySQL>> &#x1f31f;心向往之行必能至 目录 一、什么是 Protobuf&#xff1f; 二、序列化与反…...

突破reCAPTCHA屏障:EzCaptcha自动化识别实战指南

1. 为什么我们需要自动化处理reCAPTCHA&#xff1f; 每次在网上注册账号或者提交表单时&#xff0c;那个让你"勾选我不是机器人"的小方框&#xff0c;就是reCAPTCHA验证系统。作为谷歌推出的智能验证工具&#xff0c;它确实有效阻止了大量垃圾注册和恶意攻击&#xf…...

掌握微信聊天记录永久备份:从数据主权到智能记忆管理

掌握微信聊天记录永久备份&#xff1a;从数据主权到智能记忆管理 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChat…...

GLM-4V-9B图文问答实战:识别截图中的代码错误并给出修复建议

GLM-4V-9B图文问答实战&#xff1a;识别截图中的代码错误并给出修复建议 1. 项目简介与核心价值 GLM-4V-9B是一个强大的多模态大模型&#xff0c;能够同时理解图像和文本信息。我们基于Streamlit构建了一个本地部署方案&#xff0c;让你可以在自己的电脑上轻松运行这个强大的…...

GJK碰撞检测算法:从原理到实战的5个核心技巧

GJK碰撞检测算法&#xff1a;从原理到实战的5个核心技巧 【免费下载链接】gjk.c Gilbert-Johnson-Keerthi (GJK) collision detection algorithm in 200 lines of clean plain C 项目地址: https://gitcode.com/gh_mirrors/gj/gjk.c GJK碰撞检测算法是游戏开发和物理引擎…...