文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java之Springcloud Feign组件怎么用

2023-06-20 21:20

关注

这篇文章主要介绍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的请求方式。

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯