Spring Cloud feign

Spring Cloud Feign 请求添加headers 背景 部门技术升级,HttpClient需要升级Feign调用,重构某一个资方时遇到请求需要添加上自定义签名headers,踩坑后记录了下来 方案一:方法上的@RequestMapping注解添加headers信息 @RequestMapping注解的属性中包含一个headers数组,所以尝试使用,在指定的方法上@RequestMapping注解中添加需要的headers,可以是写死的,也可以读取配置,测试是有效的 同理@RequestMapping一组的@PostMapping,@GetMapping注解 阅读详情

Ribbon 简介

Spring Cloud Ribbon是基于HTTP和TCP的客户端负载均衡工具。其使用是内嵌到微服务中,提供微服务之间的调用,并支持客户端负载均衡。

客户端负载均衡

在这里插入图片描述

通常说的负载均衡指服务端负载均衡,服务端负载均衡可分为软件负载均衡和硬件负载均衡。但无论是软件负载均衡还是硬件负载均衡都会在服务端维护一个服务列表,当用户调用服务资源时服务端将根据服务列表决定调用那个服务实例。
客户端负载均衡不同于服务端负载均衡,客户端负载均衡服务列表维护在客户端,客户端通过心跳维护服务端服务列表。客户端会每隔一段时间更新本地服务列表,Ribbon做为客户端负载均衡框架,可以负载均衡的方式调用服务实例,默认采用轮询的方式

  • 服务提供者启动多个服务实例
  • 服务调用方通过使用@LoadBalanced注解修饰过的RestTemplate来实现向服务接口调用

常用配置属性

ribbon.key=value全局通用设置模式

  • ribbon.ReadTimeout: 客户端读取超时时间,超时时间要小于Hystrix的超时时间,否则重试机制就无意义了

  • ribbon.ConnectTimeout: 客户端连接超时时间

  • ribbon.OkToRetryOnAllOperations: 访问实例失败(超时),允许自动重试

  • ribbon.MaxAutoRetries: 设置重试次数,失败后会更换实例访问,请一定确保接口的幂等性,否则重试可能导致数据异常

  • ribbon.MaxAutoRetriesNextServer: 切换服务器实例的重试次数

.ribbon.key=value针对不同客户端设置模式:

  • .ribbon.ReadTimeout: 客户端读取超时时间,超时时间要小于Hystrix的超时时间,否则重试机制就无意义了

  • .ribbon.ConnectTimeout: 客户端连接超时时间

  • .ribbon.OkToRetryOnAllOperations: 访问实例失败(超时),允许自动重试

  • .ribbon.MaxAutoRetries: 设置重试次数,失败后会更换实例访问,请一定确保接口的幂等性,否则重试可能导致数据异常

  • .ribbon.MaxAutoRetriesNextServer: 切换服务器实例的重试次数

Hystrix 简介

Spring Cloud Hystrix具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并、服务监控等功能。在微服务系统中存在多个服务单元,服务单元之间存在广泛依赖关系,当一个服务节点发生故障时可能会引发故障的蔓延导致整个系统不可用。在分布式架构中,断路器模式的作用就是为了解决这种问题。当某个单元发生故障是,熔断监控器将向调用方返回一个错误响应,防止线程因故障长时间占用得不到释放,导致故障蔓延系统瘫痪。

快速入门

1.创建一个Spring boot项目,命名为hello-service,在pom.xml中添加Hystrix依赖

  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-hystrix</artifactId>
  </dependency>

2.在主类中使用@EnableCircuitBreaker注解开启断路器功能

    @EnableCircuitBreaker
    @EnableDiscoveryClient
    @SpringBooApplication
    public class ConsumerApplication{

        @Bean
        @LoadBalanced
        RestTemplate restTemplate(){

            return new RestTemplate;

        }

        public static void main(String[] args){

            SpringApplication.run(ConsumerApplication.class, args);

        }
    }

3.添加服务方法,@HystrixCommand启动熔断功能,fallbackMethod指定服务降级调用方法,当调用服务发生故障或长时间未响应将调用服务降级方法,做后续处理

    @Service
    public class HelloService{

        @Autowired
        RestTemplate restTemplate;

        @HystrixCommand(fallbackMethod = "helloFallback")
        public String helloService(){

            return restTemplate.getForEntity("http://HELLO-SERVICE/hello", String.class).getBody();
            
        }

        public String helloFallback(){

            return "error";
        }

    }

属性详情

属性配置优先级

  • 全局默认值: 没有显示设置属性值,Hystrix默认属性值
  • 全局配置属性: 在配置文件中显示指定属性值覆盖默认值。系统启动时或通过Spring Cloud Config和Spring Cloud Bus动态刷新配置功能配合下,实现对系统默认值覆盖。
  • 实例默认值: 通过代码对实例设置属性值覆盖默认值
  • 实例配置属性: 通过配置文件来为实例进行属性配置

常用配置属性

  • hystrix.command.default.execution.isolation.strategy: 配置执行隔离策略,THREAD通过线程池隔离,默认值。SEMAPHORE通过信号量隔离。

  • hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 配置执行超时时间,单位毫秒。调用接口超过设置时间将触发服务降级。

  • hystrix.command.default.execution.timeout.enabled: 设置是否启用超时时间,默认是true,如果设置成false,则超时时间配置不起作用。

  • hystrix.command.default.fallback.enabled: 是否启用服务降级策略,默认为true。

  • hystrix.threadpool.default.coreSize: 执行命令线程池的核心线程数,即命令执行的最大并发数。默认值为10。

  • hystrix.threadpool.default.maximumSize: 最大执行线程数。

  • hystrix.threadpool.default.maxQueueSize: 设置线程池最大队列大小。当为-1使用SynchronousQueue实现的队列,否则使用LinekedBlockingQueue实现的队列。

Feign 简介

Spring Cloud Feign整合了Spring Cloud Ribbon与Spring Cloud Hystrix,除提供两者强大功能外,提供了一种声明式的web服务客户端定义方式。只用使用注解便能轻松使用Feign客户端。

快速入门

1.创建一个Spring boot项目,命名为hello-service,在pom.xml中添加Hystrix依赖

  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-feign</artifactId>
  </dependency>

2.在主类中使用@EnableFeignClients注解开启Feign功能支持

    @EnableFeignClients
    @EnableDiscoveryClient
    @SpringBooApplication
    public class ConsumerApplication{

        public static void main(String[] args){

            SpringApplication.run(ConsumerApplication.class, args);

        }

    }

3.定义SslmRemoteService接口,通过@FeignClient的value属性指定服务名来绑定服务,fallback属性指定服务降级调用方法类,path属性指定公共的URL

    @FeignClient(value = "srm-supplier-lifecycle", fallback = SslmRemoteServiceFallback.class, path = "/v1/{organizationId}")
    public interface SslmRemoteService{

        /**
        *创建调查表头并发布调查表
        *
        * @param organizationId
        * @param investigateHeaderList
        * @return List<InvestigateHeaderVO>
        */
        @PostMapping("/investigate/save-release")
        List<InvestigateHeaderVO> batchSaveAndReleaseInvestgHeader(@PathVariable("organizationId") Long organizationId,
                                                                    @RequestBody List<InvestigateHeaderVO> investigateHeaderList);


    }

4.定义SslmRemoteServiceFallback回调方法类::

    @Component
    @SuppressWarnings("all")
    public class SslmRemoteServiceFallback implements SslmRemoteService{

        private static final Logger LOGGER = LoggerFactory.getLogger(SslmRemoteServiceFallback.class);

        @Override
        public List<InvestigateHeaderVO> batchSaveAndReleaseInvestgHeader(Long organizationId, List<InvestigateHeaderVO> investigateHeaderList) {
            LOGGER.error("Post batch save and release investgHeader fail");
            throw new CommonException(BaseConstants.ErrorCode.ERROR);
        }
    }

Feign 属性配置

Spring Cloud Feign整合了Spring Cloud Ribbon和Spring Cloud Hystrix,所以对于负载均衡、熔断降级的配置可以按Ribbon和Hystrix的配置。

Ribbon配置

@FeignClient中name或value属性指定的服务名即Ribbon客户端的名,因此Feign中想对不同客户端做不同配置可以根据.ribbon.key=value进行配置

Hystrix配置

feign.hystrix.enabled: 设置是否开启Feign 客户端Hystrix支持。

禁用Hystrix配置

除通过feign.hystrix.enabled设置外还可针对服务客户端关闭Hystrix支持

1.创建关闭Hystrix配置类

    @Configuration
    public class DisableHystrixConfiguration{
        
        @Bean
        @Scope("prototype")
        public Feign.Builder feignBuilder(){
            return Feign.builder();
        }

    }

2.通过@FeignClient注解中,configuration参数引入配置

    @FeignClient(value = "hello-service", configuration = DisableHystrixConfiguration.class)
    public interface HelloService{
        
    }

Feign配置属性

  • feign.compression.request.enabled: 设置是否开启请求GZIP压缩功能
  • feign.compression.response.enabled: 设置是否开启响应GZIP压缩功能
  • feign.compression.request.mime-type: 设置GZIP压缩请求的类型,默认text/xml,application/xml,application/json
  • feign.compression.request.min-request-size: 设置GZIP压缩请求大小下限,超过的请求将被压缩
如何在Spring Cloud中使用Feign 前言 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风... 阅读详情

相关推荐

一文详解Spring Cloud Feign重试机制

前言 Feign组件默认使用Ribbon的重试机制并增加了根据状态码判断重试机制,默认情况下是不启用的。Feign使用的是Spring Retry组件,需要引入依赖才能启用。 一、POM引入Spring Retry <dependency> <groupId>org.springframework.retry</groupId> ...

Java_supermanNO1的博客 1014

feign配合hystrix使用时,到底怎么设置超时时间,feign 和 hystrix 的超时时间哪个会生效

首先feign 和hystrix 都可以设置超时时间 feign 的默认超时时间有点长,在构造方法中feign.Request.Options#Options() public Options() { //默认connectTimeoutMillis连接超时时间为10秒 //默认readTimeoutMillis超时时间为60秒 this(10 * 1000, 60 * 1000); } hystrix 的默认超时时间为1秒 private static .

tszxlzc的专栏 2477

Spring Cloud 之 Feign,Hystrix 和 Gateway

Feign声明式服务调用 Feign概述 • Feign 是一个声明式的 REST 客户端,它用了基于接口的注解方式,很方便实现客户端配置。 • Feign 最初由 Netflix 公司提供,但不支持SpringMVC注解,后由SpringCloud 对其封装,支持了SpringMVC注 解,让使用者更易于接受。 Feign自动集成Ribbon,且默认开启相关功能 Feign自动集成Hystrix,但默认关闭,需要手动开启 Feign 快速入门 在消费端引入 open-feign 依赖 编写Feign

xglfire的博客 1711

@EnableFeignClients详解

*** 扫描feignClient修饰的接口,配置在配置类上即可生效* 支持接口、类以及美剧/*** 扫描路径/*** 指定某个类的包为扫描路径*/ Class <?/*** 指定配置*/ Class <?/*** 指定某些类,优先*/ Class <?@EnableFeignClients导入了FeignClientsRegistrar类,FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar,负责进行Feign的注入。

weixin_45845507的博客 1万+

Spring Cloud 整合 Feign 的原理

通过源码可知FeignClientsRegistrar实现ImportBeanDefinitionRegistrar接口,该接口从名字也不难看出其主要功能就是将所需要初始化的BeanDefinition注入到容器中,接口定义两个方法功能都是用来注入给定的BeanDefinition的,一个可自定义beanName(通过实现BeanNameGenerator接口自定义生成beanName的逻辑),另一个使用默认的规则生成beanName(类名首字母小写格式)。...

JavaMonsterr的博客 443

【云原生】Spring Cloud Alibaba 之 Feign 远程调用 实战

分布式系统下远程调用该如何选择?RestTemplate 与 Feign,Feign是最佳选择!

wanghuichen的博客 6444

注解 @EnableFeignClients 工作原理

概述 在Spring cloud应用中,当我们要使用feign客户端时,一般要做以下三件事情 : 1.使用注解@EnableFeignClients启用feign客户端; 示例 : @SpringBootApplication @EnableFeignClients public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.

ncw8080的博客 3010

随机森林文本分类

随机森林原理及代码实现 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录随机森林原理及代码实现前言一、集成算法是什么?二、随机森林是什么三、 数据预处理3.1 先来看一下我们的文本数据3.2 预处理3.3 统计评论情感值积极与消极的占比二、使用步骤参数介绍(4个)属性1.引入库2.参数调参方法总结 前言 提示:这里可以添加本文要记录的大概内容: 例如

m0_46579176的博客 5810

EnableFeignClients详解

是 Spring Cloud 中的一个注解,它用于启用 Feign 客户端的功能。是 Spring Cloud 中实现微服务间调用的重要组件,它简化了远程服务调用的复杂性,使得开发者可以更专注于业务逻辑的实现。注解是一个类级别的注解,当你在一个 Spring Boot 应用中使用它时,它会启用 Feign 客户端的自动发现和创建。的接口,Spring Cloud 会创建一个动态代理实现,该实现会根据配置的参数和方法调用,自动构造 HTTP 请求。,表示它是一个 Feign 客户端,用于调用名为。

lw_jack的博客 3344

[kriging](一)网上下载的kriging克里金的C++程序的初步调试

笔者在网上下载了一份克里金的C++程序,水平有限,正在逐步地调试中。 初步 克里金法现在在许多软件都已经有集成了,据笔者所知: arcgis : 看过有的arcgis培训视频里面简略介绍了里面的插值方法,有克里金。 surfer :笔者用过这个,效果很好。 gocad :听说有 landmark &jason :研究生时候用的专业的石油物探软件,里面有克里金法,万恶的开始。 pykrig...

FOREST优快云 5612

在MacBook M1/M2上,手把手教你打包包含嵌入模型的RagFlow Docker镜像(避坑指南)

本文详细指导如何在MacBook M1/M2上构建ARM64架构的RagFlow Docker镜像,涵盖环境准备、依赖处理、镜像构建及性能优化全流程。特别针对Apple Silicon芯片的兼容性问题提供解决方案,帮助开发者高效完成本地开发环境搭建。

weixin_26908317的博客 243

SpringCloud-@EnableFeignClients注解

@EnableFeignClients注解

sinat_38195280的博客 4401

【测试】echo发送和接收TCP/UDP数据包|shell 发送TCP/UDP数据包

目录 通过/dev/tcp、/dev/udp shell给tcp或udp服务发送16进制报文指令 通过/dev/tcp、/dev/udp (https://blog.youkuaiyun.com/u010039418/article/details/86251470) 通过/dev/tcp、/dev/udp可以直接在shell脚本中发起tcp、udp连接,方便又高效,平时用于测试啥的还是挺方便的。 直接发送 格式 /dev/udp/ip/port 比如要向本地10001端口发送数据,可以使用 ec.

我的笔记本 1万+

Spring Cloud Feign原理详解

目录 1.什么是Feign? 2.Open Feign vs Spring Cloud Feign 2.1.OpenFeign 2.2.Spring Cloud Open Feign 3.Spring Cloud Feign 的使用 4.Spring Cloud Feign 的源码解析 1.什么是Feign? Feign 的初衷是:feign makes writing java...

时光钟摆 1万+

什么是信噪比?信噪比越大好还是越小好?

在进行声音增强的时候,往往需要考虑声音信号和噪声的信噪比,那么信噪比是什么呢?越大越好还是越小越好,此处引入百度百科的解读: 信噪比,英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO),又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例。这里面的信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外信号(或信息),并且该种信号并不随原信号的变化而变化。 同样是“原信号不存在”还有一种东西叫“失真”,失真和噪声实际上有一

码匀的博客 7万+

【GameFramework框架工具链】5-1、DataTable数据表 类自动生成工具

这个是跟【GameFramework框架内置模块】3、数据表(Data Table)模块配合使用的工具链。在使用数据表的时候,我们需要先准备数据表,每个数据表对应一个C#,C#对应表里面的字段,然后使用里面的信息,比如Music数据表ID int类型 IDAssetName string类型 资源名然后,根据数据表生成C#实体类,这一块有一个StarForce的工具链,我们来看一下如何使用。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1266

Spring Cloud 服务调用 Feign

指定服务的名称,必须与服务注册中心中的名称一致。:声明调用远程服务的具体路径和方法。返回值与远程服务的响应格式一致。通过超时设置feign:client:config:default:日志级别配置日志打印级别,方便调试请求。Spring Cloud Feign 提供了高效优雅的服务调用方式,极大简化了微服务间的通信。通过合理的配置与扩展,开发者可以实现稳定、可靠的远程调用功能。结合熔断、重试与日志功能,Feign 能有效提升微服务的鲁棒性与可维护性。

Flying_Fish_roe的博客 1487

【CSP-S 提高组】考试大纲集合

【CSP-S提高组】考试大纲集合

weixin_42596089的博客 7260

Spring Cloud Feign

在Spring Cloud体系中,Feign的作用就是可以与Eureka和Riibon组合在一起简化各服务之间的http调用,它存在的意义就是简化jttp调用,让开发者可以像调用方法一样访问http接口,在非Sping Cloud体系项目中,遇到需要调用第三方接口的需求,也可以使用它去简化一些http的调用。 Feign是一个声明式的Rest客户端,它能让http调用更加简单。Feign提供了http请求的模板,通过编写简单的接口和插入注解,就可以定义好http请求的参数、格式、地址等信息,这样,就可以像

好记性不如烂笔头 863

Pytest教程:Pytest插件原理

Pytest的插件系统是其强大功能的核心,它允许用户和开发者扩展和定制测试框架的行为。要深入理解Pytest插件的原理,我们需要从Pytest的架构和设计模式开始,然后深入到底层源码。

旦莫的博客 637

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

spring cloud feign - RPC

1.关键字   负载均衡,httClient 2.基本介绍 Feign 是一个声明式web服务客户端. 它使得编写web服务非常简单.对程序员来说,只需要编写一个接口,并使用Feign提供的注解即可。Feign支持如:Feign 和 JAX-RS 注解. Feign 也支持可插拔式 编码、解码. Spring Cloud 对feign进行了二次封装,使其支质变Spring MVC 注解和

老杨叔叔 6760

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

spring cloud Feign使用@RequestLine

如何在微服务项目中调用其它项目的接口试使用spring cloud feign声明式调用。 /** * 客户端请去 * @author RAY * */ @FeignClient(name="store",configuration=FooConfiguration .class) public interface UserFeignClient { @Re...

知识分享 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

feign 序列化_Spring Cloud Feign 配置 FastJson

项目集成 FastJson 解析框架,一般都会添加一个配置文件,如下:@Configurationpublic class CustomFastJsonConfig {@BeanFastJsonHttpMessageConverter fastJsonHttpMessageConverter(){//1.需要定义一个convert转换消息的对象 FastJsonHttpMessage...

weixin_39814093的博客 2051

Spring Cloud Feign快速入门案例

一 新建一个Spring boot基础工程,取名feign-consumer,在pom.xml中增加相关依赖 &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-bo...

实践求真知 2216

Spring Cloud 全家桶之Spring Cloud Feign

(努力到这里啦!加油!)在之前的笔记中,我们用了eureka+rest+ribbon的方法实现服务注册和服务调用。如果具体的用Ribbon调用服务的话,他还有有点复杂的,所以Spring cloud Feign 就来啦!Spring Cloud Feign 是一个声明web服务客户端,它使编写web服务客户端更加容易,使Feign创建一个接口并对他注解。它整合了Ribbon和Hystrix,从而不...

Sylvia_baby的博客 591
上一篇: Spring Cloud简介
下一篇: Spring Cloud Zuul
炒栗子不加糖
博客等级 码龄10年 68粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值