OpenFeign的学习总结

1.Fegin调用只有在微服务之间才会使用,以前的单体项目用不到,因为单体项目不会涉及到分库的概念,并且单体项目就一个应用,想用的功能都可以直接方法调用,但是微服务就不行,跨服务的调用只能通过http的操作,这很像以前的单体项目不同产品之间的调用,或者前端与后端的调用。Fegin调用的实质还是http的调用。现在微服务之间调用如果还是写以前的http://ip:端口/访问路径,代码实现起来就会很麻烦,所以出现了Feign,底层做了HTTP的集成,让开发者省略了这其中的麻烦,开发更便捷

2.Feign使用少不了依赖,同时基于实际应用中一个应用会部署多台服务,所以引入fegin依赖的同时也要引入负载均衡的依赖,这个可以在自己机器上修改服务端口启动两个同应用服务玩一下,

依赖如下:

  <!--openFeign-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
  <!--负载均衡器-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>

3.对于Fegin的使用,个人理解,在微服务中,可以单独抽取一个公共api模块单独放置所有的Fegin,这样的话,整体工程看起来会更明确更有具体指向性。我们其它服务只需要去引入这个模块就可以引用到,岂不是很方便。

4.Fegin接口的写法,feign既然是微服务之间的http调用,那么就像我们对外提供业务接口类似。在实际业务开发中,对外提供接口,调用方就要通过网关访问我们Controller层的@RequestMapping("/**")+@PostMapping("/**")才可以访问到我们的服务。所以,feign也是这个逻辑,我们在写fegin接口的时候也是采取这个原则。Fegin接口调用的时候我们一定要明确调用的是哪个服务,代码案例如下:

@FeignClient(value = "***-service")
public interface I***Client {

    @DeleteMapping("/**")

      //这一列的方法,和controller层调用的是一致的,不然怎么调用呢?
    void deleteCartItemByIds(@RequestParam("ids") Collection<Long> Ids);

}

5.Feign的使用,启动类是必须要添加注解使用的,@EnableFeignClients(basePackages = "com.***.client" ),但是这个注解加在哪个服务启动类上呢?原则是,那个应用调用Fegin哪个服务启动类加。

6.Fegin调用的时候是耗费资源的,就像每次发起http连接都是要进行sorcat链接一样,或者说像我们连接数据库,每次都建立连接都耗费资源,所以有数据库连接池。同样,fegin也有链接池,且,fegin的连接池很件到,只要在服务中引入依赖,配置文件假如配置就完成了,示例如下:

依赖:<!--OK http 的依赖 -->
<dependency>
  <groupId>io.github.openfeign</groupId>
  <artifactId>feign-okhttp</artifactId>
</dependency>

配置:

feign:
  okhttp:
    enabled: true # 开启OKHttp功能

6.Fegin使用的时候,在实际应用中,尤其是服务联调或者查询bug时,会像看下请求报文或者响应报文什么的,这个时候就需要有日志,我觉得可以用切面拦截的方式实现,这样可以控制全局的feign都打印日志出来,这个百度一大堆,随便抄一个就可以了。还有一种配置类的方式,可以实现fegin的日志级别,这个涉及到局部生效和全局生效的一个区别,全局生效的方式有点类似于切面拦截方式,这种方式就是在启动类上添加注解:

全局生效:操作在启动类的注入

@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)

局部生效:只操作在当前的FeginClient

@FeignClient(value = "item-service", configuration = DefaultFeignConfig.class)

配置类:这个类做为Bean被spring容器自动装配

public class DefaultFeignConfig {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.FULL;        //日志级别
    }
}

7.Fegin日志的级别:

OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:
- NONE:不记录任何日志信息,这是默认值。
- BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
- HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
- FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
Feign默认的日志级别就是NONE,所以默认我们看不到请求日志。

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

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

相关文章

Google浏览器122.下载驱动

打开网址&#xff1a;Chrome for Testing availability (googlechromelabs.github.io) 选择stable 选择对应的驱动就行

flink重温笔记(十四): flink 高级特性和新特性(3)——数据类型及 Avro 序列化

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 14 天啦&#xff01;学习了 flink 高级特性和新特性之数据类型及 avro 序列化&#xff0c;主要是解决大数据领域数据规范化写入和规范化读取的问题&#xff0c;avro 数据结构可以节约存储空间&#xff0c;本文中结合企业真…

JVM运行时数据区概述以及分别存放的内容

JVM的运行时数据区是JVM在执行Java程序时用于存储数据和状态信息的内存区域。它分为多个部分&#xff0c;每个部分都有其特定的作用和存放的内容。 1. 方法区&#xff08;Method Area&#xff09; 作用&#xff1a;方法区是所有线程共享的内存区域&#xff0c;用于存放已被虚…

Java面试题总结9:mybatis

mybatis的优缺点 优点&#xff1a; 基于SQL语句编程&#xff0c;不会对应用程序或者数据库的现有设计造成任何影响&#xff0c;SQL写在XML里&#xff0c;解除sql与程序代码的耦合&#xff0c;便于统一管理&#xff0c;提供XML标签&#xff0c;支持编写动态SQL语句&#xff0c…

开源向量数据库介绍

在开源矢量数据库的世界里&#xff0c;有些名字因其性能、灵活性和健壮性而脱颖而出。 1. Milvus Milvus 由 Zilliz 推出&#xff0c;是一款高度可定制的开源矢量数据库&#xff0c;在处理大规模数据方面大放异彩。由于其出色的可扩展性&#xff0c;当你需要处理大量数据时&a…

判断链表回文

题目&#xff1a; //方法一&#xff0c;空间复杂度O(n) class Solution { public:bool isPalindrome(ListNode* head) {vector<int> nums; //放进数组后用双指针判断ListNode* cur head;while(cur){nums.emplace_back(cur->val);cur cur->next;}for(int i0…

如何在非spring环境中调用service中的方法

什么是非spring环境 非Spring环境指的是不使用Spring框架来管理和配置应用程序的运行时环境。在Spring框架中&#xff0c;开发者可以利用依赖注入、面向切面编程&#xff08;AOP&#xff09;、事务管理、安全性、数据访问等特性来简化企业级应用程序的开发。当应用程序不依赖于…

力扣同类题:重排链表

很明显做过一次 class Solution { public:void reorderList(ListNode* head) {if(!head||!head->next)return;ListNode *fasthead,*lowhead;ListNode *prenullptr,*curnullptr,*nextnullptr;while(fast->next!nullptr){fastfast->next;if(fast->next)fastfast->…

深入理解操作系统Operator System(2)

目录 操作系统对上的管理 系统调用接口 用户操作接口&#xff08;库函数&#xff09; 系统调用和库函数的概念 结构层次示意图 总结 为什么要有操作系统❓ 上次主要介绍了操作系统的"管理"和操作系统对下的管理。本篇主要是对上的管理。 操作系统对上的管理 …

04-ESP32S3-GPIO

ESP32S3-IDF GPIO GPIO简介 ESP32S3提供了多达45个物理GPIO管脚&#xff0c;这些管脚不仅可以作为通用的输入输出接口&#xff0c;还可以连接到内部外设信号。通过GPIO交换矩阵、IO MUX和RTC IO MUX&#xff0c;可以灵活地配置外设模块的输入信号来源于任何GPIO管脚&#xff0…

k8s存储

目录 前瞻 emptyDir存储卷 hostPath存储卷 nfs共享存储卷 PVC 和 PV NFS使用PV和PVC 配置nfs存储 定义PV 定义PVC 测试访问 搭建 StorageClass nfs-client-provisioner &#xff0c;实现 NFS 的动态 PV 创建 在192.168.75.40节点上安装nfs&#xff0c;并配置nfs服务 …

python:标准正态同质性检验(Standard Normal Homogeneity Test,SNHT) 突变点检测(以NDVI时间序列为例)

作者:CSDN @ _养乐多_ 本文将介绍标准正态同质性检验(Standard Normal Homogeneity Test,SNHT) 突变点检测代码。以 NDVI 时间序列为例。输入数据可以是csv,一列NDVI值,一列时间。代码可以扩展到遥感时间序列突变检测(突变年份、突变幅度等)中。 结果如下图所示, 文…

k8s中的service组件

背景 service组件是k8s中类似于nginx网关的入口&#xff0c;通过它可以访问到背后的pod提供的服务&#xff0c;并且自带负载均衡的功能&#xff0c;本文就简单看下service组件 k8s中的service组件 假设我们要配置一个tomcat的service集群&#xff0c;配置步骤如下 1.首先我们…

【UE5】映射方式:动作映射(Action Mappings) 与 轴映射(Axis Mappings)

在游戏中有很多功能需要键盘按键触发&#xff0c;接下来我们会制作键盘输入设置 项目资源文末百度网盘自取 打开项目设置面板 选择Input 按键的映射方式有两种&#xff1a; 一种是动作映射 / 操作映射(Action Mappings)&#xff0c;这种方式可以响应按键的按下和抬起。当键盘…

AI安全白皮书 | “深度伪造”产业链调查以及四类防御措施

以下内容&#xff0c;摘编自顶象防御云业务安全情报中心正在制作的《“深度伪造”视频识别与防御白皮书》&#xff0c;对“深度伪造”感兴趣的网友&#xff0c;可在文章留言中写下邮箱&#xff0c;在该白皮书完成后&#xff0c;会为您免费寄送一份电子版。 “深度伪造”就是创建…

关于安卓ZXing条码识别(一)引入源码

背景 从0-1引入安卓zxing&#xff0c;实现条码识别 环境 win10 as4 jdk8 引入 首先&#xff0c;官方网站&#xff0c;就是源码。链接 选择你要引入的分支&#xff0c;这里博主选择的是最近更新的分支&#xff0c;如下图&#xff1a; 上图中&#xff0c;1和2都需要引入&am…

新能源汽车结构组成

01 车身 新能源汽车的车身结构与传统燃油车有很大不同。一般来说&#xff0c;新能源汽车会采用轻量化车身设计&#xff0c;例如使用大量铝合金、高强度钢和其它轻量材料制作车身。这些材料相比传统钢材更轻盈&#xff0c;从而可以减轻整个车辆的重量&#xff0c;提高车辆的续…

mysql笔记:6. 存储引擎

文章目录 查看引擎信息常用引擎介绍InnoDBMyISAMMEMORY存储引擎的选择 数据库存储引擎是数据库底层组件&#xff0c;数据库管理系统使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等&#xff0c;使用不同的存储引擎&#…

MySQL客户端和服务器进程通信的几种方式

TCP/IP 真实环境中&#xff0c;数据库服务器进程和客户端进程可能运行在不同的主机中&#xff0c;它们之间必须通过网络来进行通讯。MySQL采用TCP作为服务器和客户端之间的网络通信协议。在网络环境下&#xff0c;每台计算机都有一个唯一的IP地址&#xff0c;如果某个进程有需…

鸿蒙开发学习:【ets_frontend组件】

简介 ets_frontend组件是方舟运行时子系统的前端工具&#xff0c;结合ace-ets2bundle组件&#xff0c;支持将ets文件转换为方舟字节码文件。 ets_frontend组件架构图 目录 /arkcompiler/ets_frontend/ ├── test262 # test262测试配置和运行脚本 ├── testTs…