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

OpenFeign微服务调用组件使用

前言:OpenFeign是可以跨服务、跨进程的调用方式。

什么是Feign

Feign是Netflix开发的声明式、模版化的HTTP客户端。
优势:
Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求,开发者无需关注与远程的交互细节,更无需关注分布式环境开发。

Spring Cloud Alibaba快速整合OpenFeign

1、引入依赖,谁远程调用谁引入这个依赖

<!-- openfeign 远程调用 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、编写调用接口
在这里插入图片描述

package com.by.controller;import cn.by.moder.OrderDTO;
import cn.by.moder.OrderOkDTO;
import cn.by.moder.OrderQueryDTO;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;import org.springframework.web.bind.annotation.*;import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;@RestController
@RequestMapping("/api/order")
public class OrderController {@GetMapping("/test")public String test() {return "咸蛋超人杨order";}@GetMapping("/ordering")public String ordering() {return "咸蛋超人杨";}@GetMapping("/ordering1")public OrderOkDTO ordering1() {OrderOkDTO build = OrderOkDTO.builder().id(10086L).needPay(new BigDecimal(100)).build();return build;}@PostMapping("/ordering2")public OrderOkDTO ordering2(@RequestBody OrderDTO orderDTO) {List<String> names = orderDTO.getProducts().stream().map(item->item.getName()).collect(Collectors.toList());String join = StrUtil.join(",", names);OrderOkDTO build = OrderOkDTO.builder().id(10086L).needPay(new BigDecimal(100)).msg(join).build();return build;}@GetMapping("/select")public String select(OrderQueryDTO queryDTO) {String empty = StrUtil.EMPTY;if (queryDTO.getId() != null) {empty = "通过Id查询"+queryDTO.getId();}if (queryDTO.getUserId()!= null) {empty = "通过UserId查询"+queryDTO.getUserId();}return empty;}@GetMapping("/sleep")public String sleep(@RequestParam Integer time) {ThreadUtil.safeSleep(time*1000);return  "你睡眠了"+time+"秒";}
}

3、在创建一个调用端,调用端在启动类上添加@EnableFeignClients注解,并创建service接口+@FeignClient注解
在这里插入图片描述
在这里插入图片描述
接口

package com.by.service;import cn.by.moder.OrderDTO;
import cn.by.moder.OrderOkDTO;
import cn.by.moder.OrderQueryDTO;
import com.by.config.FeignConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;//如果想单独配置某个服务的日志级别,使用configuration单独配置
// @FeignClient(name = "order-service-app",configuration = FeignConfig.class)
@FeignClient(name = "order-service-app")
@RequestMapping("/api/order")
public interface OrderService {@GetMapping("/ordering")String ordering();@GetMapping("/ordering1")OrderOkDTO ordering1();@PostMapping("/ordering2")OrderOkDTO ordering2(@RequestBody OrderDTO orderDTO);@GetMapping("/select")String select(@SpringQueryMap OrderQueryDTO queryDTO);@GetMapping("/sleep")String sleep(@RequestParam Integer time);
}

4、发起调用,像调用本地方法一样调用远程服务
在这里插入图片描述

高级配置

1、全局配置
注意一:此处配置@Configuration注解就会全局生效,如果想指定对应某一个服务生效,就不能配置.
注意二: 因为feign调试日志是debug级别输出,springboot默认的日志级别是info,所以feign的debug日志级别就不会输出,一定要结合

package com.by.config;import feign.Logger;
import feign.Request;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.concurrent.TimeUnit;@Configuration //全局配置 结合properties中的logging.level.com.by = debug使用
public class FeignConfig {//  @Bean// Logger.Level feignLoggerLevel(){//      // 这里记录所有请求和响应的详细信息,包括头信息等//      return Logger.Level.FULL;//  }@Beanpublic Request.Options options(){return new Request.Options(10, TimeUnit.SECONDS,20, TimeUnit.SECONDS,true);}
}

2 、局部配置
局部配置,让调用的微服务生效,在@FeignClient 注解中指定使用的配置类
在这里插入图片描述
3、 在配置文件配置

logging.level.com.beiyou = debug
开启日志##配置feign 的日志级别
#-- default 全局配置
feign.client.config.default.loggerLevel=NONE
#-- nacos-a 具体服务名
feign.client.config.nacos-a.loggerLevel=FULL

超时配置
全局配置
在这里插入图片描述
配置文件配置

#全局配置
feign.client.config.default.connectTimeout=5000
feign.client.config.default.readTimeout=10000这里default 是一个特殊的客户端名称,用于表示全局配置。设置 connectTimeout 和 readTimeout 属性的值来定义全局的连接超时时间和读取超时时间。#局部配置 请将 <clientName> 替换为实际的Feign客户端名称。
feign.client.config.<clientName>.connectTimeout=5000
feign.client.config.<clientName>.readTimeout=10000feign.client.config.order-service.connectTimeout=5000   # 连接超时时间,默认10s order-service:  #对应微服务
feign.client.config.order-service.readTimeout=10000     # 请求处理超时时间,默认60s

相关文章:

OpenFeign微服务调用组件使用

前言&#xff1a;OpenFeign是可以跨服务、跨进程的调用方式。 什么是Feign Feign是Netflix开发的声明式、模版化的HTTP客户端。 优势: Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验&#xff0c;开发者完全感知不到这是远程方法&#xff0c;更感知不到这…...

文心智能体,零代码构建情感表达大师智能体

前言 随着智能体技术的突飞猛进&#xff0c;各行各业正迎来前所未有的变革与机遇。智能体&#xff0c;作为人工智能领域的重要分支&#xff0c;以其自主性、智能性和适应性&#xff0c;正逐步渗透到我们生活的每一个角落&#xff0c;成为推动社会进步和科技发展的新动力。 为了…...

es6

# 一、变量提升性 let和const没有变量提升性 console.log(str) 》undefined var str 你好console.log(num) 报错 let num 你好console.log(a) 报错 const a 你好function demo (){ let n 2; if(true){ let n 1; } console.log(n) //2 const 也是一样 var 是1 } demo()const…...

「贪心算法」柠檬水找零

力扣原题链接&#xff0c;点击跳转。 假设你的手里没有钱。你要卖柠檬水&#xff0c;每杯5块钱。每个顾客有可能会给你5块钱、10块钱或20块钱&#xff0c;你要拿手中的钱找零。如何判断你能否成功找零呢&#xff1f; 如果一上来就有顾客花10块钱或20块钱&#xff0c;你手中没…...

ssm139选课排课系统的设计与开发+vue

选课排课系统的设计与开发vue 摘 要 互联网的普及&#xff0c;改变了人们正常的生活学习及消费习惯&#xff0c;而且也大大的节省了人们的时间&#xff0c;由于各种管理系统都再不断的增加&#xff0c;更方便了用户&#xff0c;也改良了很多的用户习惯。对于选课排课系统查询…...

Python使用virtualenv创建虚拟环境

目录 第一步&#xff1a;安装virtualenv 第二步&#xff1a;选择一个文件夹用来放所创建的虚拟环境 第三步&#xff1a;创建虚拟环境 第四步&#xff1a;激活虚拟环境 第五步&#xff1a;退出虚拟环境 第六步&#xff1a;测试安装django 前提&#xff1a;你得有个python环…...

LuatOS-Air二次开发学习

LuatOS简介 在介绍LuatOS-Air之前&#xff0c;先介绍下LuatOS。 LuatOS是合宙自研的嵌入式操作系统。覆盖各类物联网应用场景&#xff0c;可运行于4G Cat.1/MCU/NB-IoT/2G/Wi-Fi/蓝牙等等不同的物联网主控芯片。通过完善的嵌入式操作系统LuatOS&#xff0c;使得物联网主控CPU更…...

【Linux】关于获取进程退出状态中的core dump标志补充

通过 wait/waitpid 可以获取子进程的退出状态, 从而判断其退出结果. 记录退出状态的 int 变量 status 的使用情况如下图所示: 如果是收到信号终止的话, 低 7 位为收到的终止信号, 而低第 8 位为 core dump 标志, core dump 标志有什么用呢? core dump 标志只存 0/1, 表示是否…...

Vitis HLS 学习笔记--抽象并行编程模型-控制驱动与数据驱动

目录 1. 简介 2. Takeaways 3. Data-driven Task-level Parallelism 3.1 simple_data_driven 示例 3.2 分析 hls::task 类 3.3 分析通道(Channel) 3.4 注意死锁 4. Control-driven Task-level Parallelism 4.1 理解控制驱动的 TLP 4.2 simple_control_driven 示例 4…...

Python爬取B站视频:封装一下

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…...

Android Low Storage机制之DeviceStorageMonitorService

一、Android 版本 Android 13 二、low storage简介(DeviceStorageMonitorService) 设备存储监视器服务是一个模块&#xff0c;主要用来&#xff1a; 1.监视设备存储&#xff08;“/ data”&#xff09;。 2.每60秒扫描一次免费存储空间(谷歌默认值) 3.当设备的存储空间不足…...

1105: 交换二叉树的孩子结点

解法&#xff1a; #include<iostream> using namespace std; struct treeNode {char val;treeNode* left, * right;treeNode(char x) :val(x), left(NULL), right(NULL) {}; }; treeNode* buildtree() {char ch;cin >> ch;if (ch #) return NULL;treeNode* r ne…...

TensorFlow.js

什么是 TensorFlow.js&#xff1f; TensorFlow.js 是一个基于 JavaScript 的机器学习库&#xff0c;它是 Google 开发的 TensorFlow 的 JavaScript 版本。它使得开发者能够在浏览器中直接运行机器学习模型&#xff0c;而不需要依赖于后端服务器或云服务。TensorFlow.js 的主要…...

131. 面试中关于架构设计都需要了解哪些内容?

文章目录 一、社区系统架构组件概览1. 系统拆分2. CDN、Nginx静态缓存、JVM本地缓存3. Redis缓存4. MQ5. 分库分表6. 读写分离7. ElasticSearch 二、商城系统-亿级商品如何存储三、对账系统-分布式事务一致性四、统计系统-海量计数六、系统设计 - 微软1、需求收集2、顶层设计3、…...

Nodejs+Websocket+uniapp完成聊天

前言 最近想做一个聊天&#xff0c;但是网上的很多都是不能实现的&#xff0c;要么就是缺少代码片段很难实现websocket的链接&#xff0c;更别说聊天了。自己研究了一番之后实现了这个功能。值得注意的是&#xff0c;我想在小程序中使用socket.io&#xff0c;不好使&#xff0…...

神经网络学习

神经网络学习 导语数据驱动驱动方法训练/测试数据 损失函数均方误差交叉熵误差mini-batch 数值微分梯度梯度法神经网络梯度 学习算法的实现随机梯度下降2层神经网络实现mini-batch实现 总结参考文献 导语 神经网络中的学习指从训练数据中自动获取最优权重参数的过程&#xff0…...

CentOS部署NFS

NFS服务端 部署NFS服务端 sudo yum install -y nfs-utils挂载目录 给 NFS 指定一个存储位置&#xff0c;也就是网络共享目录。一般来说&#xff0c;应该建立一个专门的 /data 目录&#xff0c;方便起见使用临时目录 /tmp/nfs&#xff1a; mkdir -p /tmp/nfs #修改权限 chmo…...

JWT使用方法

目录 基础概念 依赖 生成令牌 工具类 控制层 解析令牌 工具类 网关过滤器 效果 基础概念 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点…...

使用鱼香肉丝一键安装重新安装ROS后mavros节点报错,.so文件不匹配

解决方案&#xff1a; 1、写在mavros相关软件&#xff0c;共卸载7个包 sudo apt-get remove ros-melodic-mav*2、重新安装mavros&#xff0c;共安装10个包 sudo apt-get remove ros-melodic-mav*...

STM32+CubeMX移植SPI协议驱动W25Q16FLash存储器

STM32CubeMX移植SPI协议驱动W25Q16FLash存储器 SPI简介拓扑结构时钟相位&#xff08;CPHA&#xff09;和时钟极性&#xff08; CPOL&#xff09; W25Q16简介什么是Flash&#xff0c;有什么特点&#xff1f;W25Q16内部块、扇区、页的划分引脚定义通讯方式控制指令原理图 CubeMX配…...

利用DeepSeek编写能在DuckDB中读PostgreSQL表的表函数

前文实现了UDF和UDAF&#xff0c;还有一类函数是表函数&#xff0c;它放在From 子句中&#xff0c;返回一个集合。DuckDB中已有PostgreSQL插件&#xff0c;但我们可以用pqxx库实现一个简易的只读read_pg()表函数。 提示词如下&#xff1a; 请将libpqxx库集成到我们的程序&#…...

[蓝桥杯]阶乘求值【省模拟赛】

问题描述 给定 nn&#xff0c;求 n!n! 除以 10000000071000000007 的余数。 其中 n!n! 表示 nn 的阶乘&#xff0c;值为从 11 连乘到 nn 的积&#xff0c;即 n!123…nn!123…n。 输入格式 输入一行包含一个整数 nn。 输出格式 输出一行&#xff0c;包含一个整数&#xff…...

MCP调研

什么是 MCP MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;&#xff0c;是由 Anthropic 在 2024 年 11 月底推出的开放标准协议&#xff0c;旨在统一大型语言模型&#xff08;LLM&#xff09;与外部数据源、工具的通信方式。MCP 的主要目的在于…...

QuickBASIC QB64 支持 64 位系统和跨平台Linux/MAC OS

QuickBASIC 的现代继任者 QB64 已发展成为一个功能强大的开源项目&#xff0c;支持 64 位系统和跨平台开发。以下是详细介绍&#xff1a; 项目首页 - QB64pe:The QB64 Phoenix Edition Repository - GitCode https://gitcode.com/gh_mirrors/qb/QB64pe 1. QB64 概述 官网&am…...

CSS 渐变完全指南:从基础概念到实战案例(线性渐变/径向渐变/重复渐变)

一、什么是 CSS 渐变&#xff1f; 渐变是网页设计中常用的视觉效果&#xff0c;指两种或多种颜色之间的平滑过渡。CSS 提供了强大的渐变功能&#xff0c;无需依赖图片即可创建复杂的色彩过渡效果&#xff0c;主要分为线性渐变和径向渐变两大类。 二、线性渐变&#xff08;Line…...

【设计模式-3.6】结构型——桥接模式

说明&#xff1a;本文介绍结构型设计模式之一的桥接模式 定义 桥接模式&#xff08;Bridge Pattern&#xff09;又叫作桥梁模式、接口&#xff08;Interface&#xff09;模式或柄体&#xff08;Handle and Body&#xff09;模式&#xff0c;指将抽象部分与具体实现部分分离&a…...

【仿生机器人】仿生机器人认知-情感系统架构设计报告

来自 gemini 2.5 1. 执行摘要 本报告旨在为仿生机器人头部设计一个全面的认知-情感软件架构&#xff0c;以实现自然、情感智能的互动。拟议的架构将使机器人能够像人类一样&#xff0c;动态生成情绪、进行复杂的表情表达&#xff08;包括情绪掩饰&#xff09;、拥有强大的记忆…...

【MAC】YOLOv8/11/12 转换为 CoreML 格式并实现实时目标检测

在本文中,我们将详细介绍如何将 YOLOv8/11/12 模型转换为 CoreML 格式,并使用该模型在摄像头实时检测中进行目标检测。主要适用于M1、M2、M3、M4芯片的产品。 以下教程在YOLOv8/11/12均适用,此处就以 YOLOv11 举例 目录 前提条件YOLOv8/11/12 转换为 CoreML实时目标检测结论…...

Flink SQL 编程详解:从入门到实战难题与解决方案

Flink SQL 编程详解&#xff1a;从入门到实战难题与解决方案 Apache Flink 是当前流批一体实时计算的主流框架之一&#xff0c;而 Flink SQL 则为开发者提供了用 SQL 语言处理流式和批量数据的能力。本文将全面介绍 Flink SQL 的基础概念、编程流程、典型应用场景、常见难题及…...

数据结构——优先级队列(PriorityQueue)

1.优先级队列 优先级队列可以看作队列的另一个版本&#xff0c;队列的返回元素是由是由插入顺序决定的&#xff0c;先进先出嘛&#xff0c;但是有时我们可能想要返回优先级较高的元素&#xff0c;比如最大值&#xff1f;这种场景下就由优先级队列登场。 优先级队列底层是由堆实…...