我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java之Springcloud Feign组件怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java之Springcloud Feign组件怎么用

这篇文章主要介绍Java之Springcloud Feign组件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、Feign是什么?

OpenFeign是Spring Cloud提供的一个声明式的伪Hltp客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可,Nacos很好的兼容了OpenFeign,OpenFeign默认集成了Ribbon,
所以在Nacos下使用OpenFeign默认就实现了负载均衡的效果。

二、使用步骤

Java之Springcloud Feign组件怎么用

1.消费方导入依赖

···c

org.springframework.cloud
spring-cloud-starter-openfeign

···

2.服务消费方的主程序启动类添加注解,开启@EnableFeignClients

@SpringBootApplication@MapperScan("com.csqf.mapper")@Import({        Swagger2Config.class,        ControllerExceptionAdvice.class,})@EnableFeignClientspublic class springcloud_share_6002 {    public static void main(String[] args) {        SpringApplication.run(springcloud_share_6002.class,args);    }    @Bean    @LoadBalanced    public RestTemplate restTemplate(){        return new RestTemplate();    }}

Java之Springcloud Feign组件怎么用

3.服务消费方 创建远程调用接口

@Service@FeignClient("user-6001")public interface UserFeignService {    @GetMapping("/api/user/{id}")    public R getUserNameById(@PathVariable("id") Integer id);}

代码如下(示例):

4.更改代码后测试

@RestController@RequestMapping("/api/share")public class ShareContoller {    @Autowired    private ShareServiceImpl shareService;//    @Autowired//    private RestTemplate restTemplate;//    @Autowired//    private DiscoveryClient discoveryClient;    @Autowired    private UserFeignService userFeignService;    @GetMapping("/{id}")    public R getShareById(@PathVariable("id") Integer id) {        Share share = shareService.getShareById(id);        R r = userFeignService.getUserNameById(share.getUserId());        String s = r.getData().toString();        ShareDto shareDto = new ShareDto();        BeanUtils.copyProperties(share,shareDto);        shareDto.setUserName(s);        return new R(ResponseEnum.SUCCESS,shareDto);    }}

补充

1.重试机制

1:如果所有的重试完成 还是失败 要抛出  feign.RetryableException 异常2: 重试 会产生接口的幂等性问题:1:查询的接口 天生是幂等的2: 增删改的处理非幂等的
配置说明
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds断路器的超时时间需要大于ribbon的超时时间,不然不会触发重试。
hello-service.ribbon.ConnectTimeout请求连接的超时时间
hello-service.ribbon.ReadTimeout请求处理的超时时间
hello-service.ribbon.OkToRetryOnAllOperations是否对所有操作请求都进行重试
hello-service.ribbon.MaxAutoRetriesNextServer重试负载均衡其他的实例最大重试次数,不包括首次server

2 远程调用的时候出现异常的处理(ControllerExceptionAdvice)

@ExceptionHandler(RetryableException.class)    @ResponseBody    public R doException(RetryableException ex){        ex.printStackTrace();        //  System.out.println("抛出未知异常");        return new R(ResponseEnum.FEIGN_RETRY,null);    }

3.Feign的传递参数方式注意事项

如果你传递的参数,比较复杂时,默认会采用POST的请求方式。

  • 传递单个参数时,推荐使用@PathVariable,如果传递的单个参数比较多,这里也可以采用@RequestParam,不要省略value属性

  • 传递对象信息时,统一采用json的方式,添加@RequestBody。Client接口必须采用@RequestMapping

Java之Springcloud Feign组件怎么用

Java之Springcloud Feign组件怎么用

Java之Springcloud Feign组件怎么用

spring cloud项目使用feign的时候都会发现一个问题,就是get方式无法解析对象参数。其实feign是支持对象传递的,但是得是Map形式,而且不能为空,与spring在机制上不兼容,因此无法使用。

spring cloud在2.1.x版本中提供了@SpringQueryMap注解,可以传递对象参数,框架自动解析。

调用方feign接口只能是被调用方接口
public R f1(User user) 或 public R f1(@RequestBoby User user)参数 @RequstBoby 对象
public R f1(@SpringQueryMap User user)参数 对象

Java之Springcloud Feign组件怎么用

总结

FEIGN 集成ribbon 和 resttemplate,简化 服务之间的调用
Feign是通过内置的Ribbon进行负载均衡,并通过HTTP去访问被调用方,所以Feign的重试,其实就是Ribbon的重试。另外,我们在实际工作中使用Feign,用到Hystrix,在这里就顺便说一下Hystrix的原理。举例说明下,假如在没有Hystrix的情况下,用户一个下单操作需要调用订单、支付、物流三个服务,如果其中物流Service因为种种问题不能提供服务,即便另外两个服务都好好的,整个下单操作也会因为物流Service而阻塞住,导致下单服务崩溃。而Hystrix为每个依赖的服务配置独立的线程池并进行隔离,假设下单服务有90个线程,没有Hystrix,则因为物流Service不能提供服务,不停地重试直到90个线程全卡死。而有了Hystrix,三个依赖的服务,每个30个线程,即便物流的30个全部阻塞了,也不影响另外两个服务的线程。

以上是“Java之Springcloud Feign组件怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java之Springcloud Feign组件怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java之Springcloud Feign组件怎么用

这篇文章主要介绍Java之Springcloud Feign组件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、Feign是什么?OpenFeign是Spring Cloud提供的一个声明式的伪Hltp客户端
2023-06-20

SpringCloud中Ribbon和Feign组件如何使用

SpringCloud中Ribbon和Feign组件如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、Ribbon简介1、基本概念Ribbon是一个客户
2023-06-02

SpringCloud中Feign组件添加请求头的坑怎么解决

这篇文章主要介绍“SpringCloud中Feign组件添加请求头的坑怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud中Feign组件添加请求头的坑怎么解决”文章能帮助大
2023-07-02

SpringCloud Feign的作用是什么及怎么使用

本篇内容主要讲解“SpringCloud Feign的作用是什么及怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringCloud Feign的作用是什么及怎么使用”吧!一、什么是F
2023-07-04

SpringCloud Gateway路由组件怎么使用

这篇文章主要介绍“SpringCloud Gateway路由组件怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud Gateway路由组件怎么使用”文章能帮助大家解决问题。
2023-07-05

Java中Feign怎么用

这篇文章给大家分享的是有关Java中Feign怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一,简介Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit、JAXRS-
2023-05-30

springcloud怎么使用Feign后台内部传递MultipartFile

这篇文章主要介绍了springcloud怎么使用Feign后台内部传递MultipartFile,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如何使用Feign后台内部传递M
2023-06-29

SpringCloud怎么利用Feign访问外部http请求

这篇文章主要介绍了SpringCloud怎么利用Feign访问外部http请求的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringCloud怎么利用Feign访问外部http请求文章都会有所收获,下面我们
2023-06-29

SpringCloud怎么使用feign时的复杂参数传递

这篇文章给大家分享的是有关SpringCloud怎么使用feign时的复杂参数传递的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Feign传参注意最近在用SpringCloud尝试重构以前的项目,使用Feign客
2023-06-20

SpringCloud Feign中怎么使用ApacheHttpClient代替默认client方式

这篇文章主要讲解了“SpringCloud Feign中怎么使用ApacheHttpClient代替默认client方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringCloud
2023-06-29

SpringCloud基于Feign的可编程式接口怎么调用

今天小编给大家分享一下SpringCloud基于Feign的可编程式接口怎么调用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
2023-06-30

java springcloud的Stream怎么使用

本篇内容主要讲解“java springcloud的Stream怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java springcloud的Stream怎么使用”吧!Spring C
2023-06-05

SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway

本文小编为大家详细介绍“SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud怎么实现服务调用feign、熔断hystrix和网关gat
2023-07-05

java swing组件怎么用

Java Swing组件是一种用于创建图形用户界面(GUI)的工具包。下面是一些常用的Swing组件的使用方法:JFrame:JFrame是一个顶级容器,用于创建一个窗口。可以使用构造函数创建一个JFrame对象,并设置其属性,然后使用se
2023-10-27

springcloud feign服务间调用date类型转换错误怎么解决

这篇文章主要讲解了“springcloud feign服务间调用date类型转换错误怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springcloud feign服务间调用date
2023-06-29

Vue3之Teleport组件怎么使用

Teleport组件解决的问题版本:3.2.31如果要实现一个“蒙层”的功能,并且该“蒙层”可以遮挡页面上的所有元素,通常情况下我们会选择直接在标签下渲染“蒙层”内容。如果在Vue.js2中实现这个功能,只能通过原生DOMAPI来手动搬运DOM元素实现,这就会使得元素的渲染与Vue.js的渲染机制脱节,并会导致各种可预见或不可遇见的问题。Vue.js3中内建的Teleport组件,可以将指定内容渲染到特定容器中,而不受DOM层级的限制。可以很好的解决这个问题。下面,我们来看看Teleport组件
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录