【Feign】Spring框架集成Feign

news2024/12/23 10:21:29

Spring框架集成Feign

    • 1、Feign-简介
    • 2、spring-cloud快速整合OpenFeign
    • 3、Feign日志
    • 4、Feign契约配置
    • 5、Feign配置超时时间
    • 6、Feign拦截器
    • 7、Feign断路器

1、Feign-简介

Feign是Neflix开发的声明式、模块化的HTTP客户端,集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,Feign可以帮助我们更加便捷、优雅的调用HTTP API。
Spring Cloud OpenFeign是对Feign的增强,使其支持Spring MVC 注解,另外还整合了Ribbon和Nacos,从而是的Feign使用更加方便,有了feign我们就不用使用resttemplate远程调用了(调用Controller层)。

2、spring-cloud快速整合OpenFeign

1)在调用服务中添加依赖

<!--添加openfeign依赖,依赖于sprin-cloud-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2)配置需要调用的接口

/*
 * name 指定调用rest接口对应服务名
 * path 指定调用接口所在Controller的@RequestMapping对应路径,没有则不填
 */
@FeignClient(name = "stock-service", path = "/stock")
public interface StockFeignService {
    // 声明需要调用的接口方法名
    @PostMapping("/reduct")
    String add(@RequestParam("name") String name);
}

3)启动类加上注解

@EnableFeignClients

4)直接调用

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private StockFeignService stockFeignService;

    @GetMapping("/getOrder")
    public String getOrder(){
        stockFeignService.add("10");
        return "Hello world";
    }
}

注:使用feign需要在参数前面加上@RequestParam和@PathVariable注解并指定参数,不然获取不到参数。

3、Feign日志

1)feign日志级别:

  • NONE(默认):不记录任何日志,性能最佳,适用于生产环境;
  • BASIC:仅记录请求方法、URL、响应状态代码以及执行时间,适用于生产环境追踪问题;
  • HEADERS:在BASIC级别的基础上,记录请求和响应的header;
  • FULL:记录请求和响应的header、body和元数据,适用于开发测试定位问题。

2):配置feign日志:

package com.swp.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// 全局配置: 使用@Configuration会全局配置到所有服务提供方(被调用方)
// 局部配置: 如果只针对某个服务,就不要使用@Configuration,在@FeignClient(name = "stock-service", path = "/stock", configuration = FeignClient.class)中加入configuration = FeignClient.class

@Configuration
public class FeignConfig {
    @Bean
    public Logger.Level feignLogerLevel(){
        return Logger.Level.FULL;
    }
}

yaml配置日志级别

#spring 默认日志级别是info,feign的debug日志不会输出,所以需要配置输出日志级别
logging:
  level:
    com.swp.feign: debug #只输出feign目录下的日志

日志输出:
在这里插入图片描述

4、Feign契约配置

若以前使用的feign原生注解,在不想改变原生注解的情况下,可以使用Feign契约配置

feign:
	client:
		config:
			contract: feign.Contract.Default
	

5、Feign配置超时时间

全局配置:

@Configuration
public class FeignConfig(){
	@Bean
	public Request.Options options(){
		return new Request.Options(5000,10000);
	}
}

yaml配置

feign:
	client:
		config:
			mall-order: #对应微服务
			# 连接超时时间。默认2s
			connectTimeout: 5000
			# 请求处理超时时间,默认5s
			readTimeout: 10000

6、Feign拦截器

在服务消费者调用服务提供者时触发。
Feign拦截器配置类

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CustomFeignInterceptor implements RequestInterceptor {
    Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public void apply(RequestTemplate requestTemplate) {
        requestTemplate.header("token", "123");
        requestTemplate.query("name", "999");
        // requestTemplate.uri("/111"); 拦截所有路径,并修改为/{xx}
        logger.info("feign拦截器");
    }
}

注入配置类

 // 注入自定义feign拦截器
    @Bean
    public CustomFeignInterceptor customFeignInterceptor(){
        return new CustomFeignInterceptor();
    }
}

7、Feign断路器

#开启hysrris
feign:
  hystrix:
    enabled: true

定义SysMgrHystrix ,实现FallbackFactory的create方法来提供服务降级实现类对象的创建,
ServiceSysMgrClient是自己的feign接口

@Component
public class SysMgrHystrix implements FallbackFactory<ServiceSysMgrClient> { 

    @Override
    public ServiceSysMgrClient create(Throwable throwable) {
        return new ServiceSysMgrClient() {
           // 下面是feign接口
            @Override
            public Result<List<OrgNode>> getOrgChildren(Integer parentOrgId) {
                return "被回滚了";
            }
        };
    }
}

然后在Feign接口上面加上 fallbackFactory = SysMgrHystrix.class
在这里插入图片描述

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

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

相关文章

快收藏,2023有这些财务分析模板就够了

相信很多的财务人都才刚刚经历一个兵荒马乱的年终&#xff0c;各种核算、整理、分析&#xff0c;工作量直线上升&#xff0c;说不定加班几点半个月都未必能歇一下。但不用担心&#xff0c;在接下来的2023里&#xff0c;可以通过BI财务分析报表模板来高效解决这些问题。 BI软件…

[python][VTK]vtk安装后测试代码

测试vtk版本为9.2.5 import vtk cone_a vtk.vtkConeSource() coneMapper vtk.vtkPolyDataMapper() coneMapper.SetInputConnection(cone_a.GetOutputPort()) coneActor vtk.vtkActor() coneActor.SetMapper(coneMapper) ren1 vtk.vtkRenderer() ren1.AddActor(coneActor…

黑马点评项目要点内容总结【面试用】

小众点评项目要点 文章目录小众点评项目要点1.使用Redis代替Session登录1.1 Session登录存在的问题1.2 使用Redis代替Session登录分析1.3 使用Redis登录的流程1.4 解决Redis中有效期问题2.使用Redis作为缓存2.1 为什么使用缓存2.2 缓存策略2.3 解决缓存穿透2.4 解决缓存雪崩2.5…

熵值法原理及python实现 附指标编制案例

文章目录1.简单理解 信息熵2.编制指标 &#xff08;学术情景应用&#xff09;3.python实现3.1 数据准备3.2 数据预处理3.3 熵值、权重计算3.4 编制综合评价指标熵值法也称熵权法&#xff0c;是学术研究&#xff0c;及实际应用中的一种常用且有效的编制指标的方法。1.简单理解 信…

在数组中删除重复数字(详解)

前言&#xff1a;本期是关于删除重复数字的详解&#xff0c;今天你c了吗&#xff1f; 方法&#xff1a; 双指针 以一组数&#xff1a;3 4 1 0 0 2 3 1 1 2 为例删除重复的数字 step 1&#xff1a;排序 使用双下标法的前提是数组有序&#xff08;降序or升序&#xff09; 可以使…

MYSQL命令总结

一.库的操作 1.创建库 create database db1;//创建名为db1的数据库 create database db2 charsetutf8;//创建一个utf8字符集的db2数据库 create database db3 charsetutf8 collate utf8_general_ci;//创建一个使用utf字符集并带校对规则的db3数据库2.字符集和校验规则 show …

[redis+springboot]缓存sql执行结果

场景: 访问controller层(其实是service),需要将其结果缓存到redis,下一次直接从缓存找值,从而减少sql操作,减轻数据库压力技术: redis,springboot,jpa,mysql1, 新建项目2, 导入依赖<?xml version"1.0" encoding"UTF-8"?> <project xmlns"h…

懂了委托,才算真正入门C#

文章目录委托的概念多播委托拖动按钮前文提要&#xff1a;超快速成&#xff0c;零基础掌握C#开发中最重要的概念抽丝剥茧&#xff0c;C#面向对象快速上手Winform&#xff0c;最友好的桌面GUI框架 委托的概念 委托这个名字取的神乎其神的&#xff0c;但实质是函数式编程&#…

网络攻防技术--第五次作业

文章目录作业五一、 什么是恶意代码&#xff1f;恶意代码主要类型有哪些&#xff1f;二、 恶意代码的基本技术主要包括哪几种&#xff1f;三、 什么是特洛伊木马&#xff1f;有什么特点&#xff1f;四、 什么是计算机病毒&#xff1f;其有哪几个基本组成部分&#xff1f;五、 什…

项目管理工具能做什么 它给企业带来哪些作用

一个项目经理&#xff0c;如果要想管理好项目&#xff0c;那么一定要掌握项目管理的方法与工具。在项目管理过程中总会借助一些工具来掌控项目点点滴滴&#xff0c;这不仅可以提高团队的生产力和效率&#xff0c;还可以让项目组织在不同项目带来的影响变化中做好准备。 项目管…

每天一道大厂SQL题【Day03】订单量统计

每天一道大厂SQL题【Day03】订单量统计 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&#xff0c…

SAP 自定义SQL编辑器

导语&#xff1a;自定义SQL编辑器&#xff0c;可使用SAP ABAP的OPEN SQL语法进行编辑&#xff0c;快速出具简单报表&#xff0c;基本具备与SAP中DB02相似的功能。 此资源其中有两个版本&#xff0c;一个版本是网上的代码资料&#xff0c;另一个版本是本人优化过后的&#xff0…

Gerrit3.4.1安装使用

环境依赖jdk11 安装jdk11&#xff1a; 下载&#xff1a; wget https://download.java.net/openjdk/jdk11/ri/openjdk-1128_linux-x64_bin.tar.gz解压&#xff1a; tar zxvf openjdk-1128_linux-x64_bin.tar.gzsudo update-alternatives --install /usr/bin/java java /home/je…

Fiddler抓包工具配置+Jmeter基本使用

目录 一、Fiddler抓包工具的配置和使用 局域网络配置# Fiddler配置# Fiddler抓包实例# 二、Jmeter的基本使用 Jmeter的安装配置# 第一个Jmeter脚本# 一、Fiddler抓包工具的配置和使用 在编写网关自动化脚本之前&#xff0c;得先学会如何抓包&#xff0c;这里以Fiddler为…

Docker容器及安装 01

前言 1.1 从环境配置说起 环境配置是软件开发的一大难题。开发、测试及运维人员需要相同的代码运行环境&#xff0c;如此一来就需要多次搭建环境&#xff0c;想想就觉得麻烦&#xff0c;实际上&#xff0c;在不了解docker等容器技术以前&#xff0c;还真就是这么干的&#xff…

2023年FOF/MOM基金研究报告

第一章 概况 FOF 是 Fund of Funds 的简称&#xff0c;即“基金中的基金”&#xff0c;是一种专门投资于其他投资基金的基金。FOF 并不直接投资股票或债券&#xff0c;其投资范围主要限于其他基金。按照募集方式&#xff0c;FOF 分为公募 FOF 和私募 FOF。 公募 FOF 是指将80…

python小游戏——飞机大战代码开源

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;愿所有的美好&#…

明细打印重影方案

一、问题描述生产上出现明细查询打印业务&#xff0c;部分客户打印数据时出现数据重叠现象&#xff0c;不利于客户使用&#xff0c;影响客户体验。二、问题原因对方户名公司名称字段目前没有限制&#xff0c;按照现有的分页处理机制&#xff0c;如果一页纸出现多个公司名称较长…

python中值传递、引用传递、global关键字

结论1、函数中&#xff0c;数值、字符、元组的传递是值传递 b 5 print(id b ,id(b))def change(b):print(\n)#print(在函数change中 修改前 id b ,id(b))b 0print(在函数change中 修改后 id b ,id(b))def print_b():print(\n)print(在函数print b中 b , b)print(在函数pri…

【C++修炼之路】C++入门(下)

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录一、前言二、内联函数1、概念2、特性三、auto&#xff08;C 11)1、概念2、价值3、三个不能四、范围for循环(C11)1、基本使用2、使…