一 点睛

Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。

在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。

Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka(在我的前两篇文章中讲过了),从而让Feign的使用更加方便。

Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。

Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

Spring Cloud Feign具备可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring MVC的注解。

二,怎么使用 

  1.pom.xml中加入依赖

<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>2.在启动类中加入注解
@SpringBootApplication@EnableFeignClientspublic class OrderServiceApplication {

    public static void main(String[] args) {        SpringApplication.run(OrderServiceApplication.class, args);    }    @Bean    @LoadBalanced    public RestTemplate restTemplate() {        return new RestTemplate();    }

}
3.创建一个接口(ProductClient)
//服务的生成者(被调用者)在注册中心注册的名字@FeignClient(name = "product-service")public interface ProductClient {    //被调用者对应方法的路由(类和方法上的@RequestMapping)    /**     * 这里需要注意的两个地方     * <p>     * 1、在这里使用的GetMapping注解要和被调用发一致,如果还有问题就用@RequestMapping     * 2、@PathVariable需要设置value,如果不设置也不能成功启动
   *  注意点   1、路径     * 2、Http方法必须对应
   * 3、使用requestBody,应该使用@PostMapping     * 4、多个参数的时候,通过@RequestParam("id") int id)方式调用
     */    @GetMapping("/api/v1/product/find")    String findById(@RequestParam(value = "id") int id);}4.在需要的地方注入ProductClient   调用其方法
@Servicepublic class ProductOrderServiceImpl implements ProductOrderService {

    @Autowired    private ProductClient productClient;    @Override    public ProductOrder save(int userId, int productId) {        //通过Feign 调用返回的是字符串几个使用json转换工具转成对象使用        String product = productClient.findById(userId);        JsonNode jsonNode = JsonUtils.stringToNode(product);        ProductOrder productOrder = new ProductOrder();        productOrder.setCreateTime(new Date());        productOrder.setUserId(userId);        productOrder.setTradeNo(UUID.randomUUID().toString());        productOrder.setProductName(jsonNode.get("name").toString());        productOrder.setPrice(Integer.parseInt(jsonNode.get("price").toString()));        return productOrder;    }}

上面完成了,Feign 也就可以用了,如果你要配置集群,测试默认负载策略,和上一篇文章ribbon 一模一样。因为Feign整合了ribbon 而且上一篇文章对于ribbon配置负载策略的方法对于Feign也有效。

2、超时配置
默认optons readtimeout是60,但是由于hystrix默认是1秒超时,所以默认就是1秒 在调用方yml 文件中加入一下配置(1秒足以,除非项目有要求,不然不需要配置)

#修改调用超时时间
feign:
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 2000

spring cloud的Netflix中提供了两个组件实现软负载均衡调用:ribbon和feign

3.ribbon和feign两个的区别和选择

目前,在Spring cloud 中服务之间通过restful方式调用有两种方式 
- restTemplate+Ribbon 
- feign

相同点:

  :ribbon和feign都是实现软负载均衡调用

不同点:

ribbon

是一个基于 HTTP 和 TCP 客户端的负载均衡器 

它可以在客户端配置 ribbonServerList(服务端列表),然后默认以轮询请求以策略实现均衡负载,他是使用可以用restTemplate+Ribbon 使用

feign:

Spring Cloud Netflix 的微服务都是以 HTTP 接口的形式暴露的,所以可以用 Apache 的 HttpClient ,而 Feign 是一个使用起来更加方便的 HTTP 客戶端,使用起来就像是调用自身工程的方法,而感觉不到是调用远程方法

选择
选择feign
默认集成了ribbon
写起来更加思路清晰和方便
采用注解方式进行配置,配置熔断等方式方便

转载于:https://www.cnblogs.com/xiaowangbangzhu/p/10397037.html

SpringCloud(三)之Feign实现负载均衡的使用相关推荐

  1. nginx(三)反向代理和负载均衡

    nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...

  2. springcloud 实现反向代理和负载均衡

    springcloud 实现反向代理和负载均衡 1. 搭建注册中心,路由服务zuul,两个服务端 参考我的上一篇博客 springcloud项目搭建 注意两个服务端服务名称要相同,端口不能相同配置如下 ...

  3. openfeign ribbon 负载_SpringCloud教程(三)声明式访问Feign、负载均衡Ribbon

    0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...

  4. JavaEE进阶知识学习-----SpringCloud(六)Ribbon负载均衡

    Ribbon负载均衡 Ribbon概述 Spring Cloude Ribbon是基于Netfilx Ribbon实现的一套客户端 负载均衡的工具,简单说,Ribbon是Netfilix发布的开源项目 ...

  5. SpringCloud源码:Ribbon负载均衡分析

    本文主要分析 SpringCloud 中 Ribbon 负载均衡流程和原理. SpringCloud版本为:Edgware.RELEASE. 一.时序图 和以前一样,先把图贴出来,直观一点: 二.源码 ...

  6. SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)...

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册 ...

  7. SpringCloud组件:Ribbon的负载均衡策略及原理

    来源:blog.csdn.net/wudiyong22/article/details/80829808 Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法 ...

  8. 阿里云大学 ECS实践(三)ECS+SLB 负载均衡实践

    ECS+SLB 负载均衡实践 ECS+SLB 负载均衡实践 背景知识 阿里云负载均衡 简介 架构 特点 产品优势 云服务器状态确认 负载均衡配置 进入阿里云控制台: 通过负载均衡业务配置向导,配置负载 ...

  9. SpringCloud Alibaba 实战之《负载均衡:Ribbon 如何保证微服务的高可用》

    上一讲我们对 Nacos 的集群环境与实现原理进行了讲解,我们已经可以轻松将单个微服务接入到 Nacos 进行注册,但是微服务本不是孤岛,如何实现有效的服务间稳定通信是本文即将介绍的主要内容,本次我们 ...

最新文章

  1. MySQL主从复制故障案例一
  2. 如何增加SAP_ALL的权限
  3. oracle9I收缩表,Oracle 9i删除数据表(转)
  4. static void SetSysClockTo72(void)的一些理解
  5. QT 提示之右下角冒泡
  6. 深度学习数据标注工具(转)
  7. MySql Cluster 集成安装,Centos,坑点集锦
  8. WCF探索之旅(五)——WCF与WebService的异同
  9. RFIC4463_F2C
  10. 公司内网环境下部署流量监控服务器的初步方案
  11. 霍尔元件在高斯计上的应用与工作原理
  12. 正交试验软件测试用例设计方法【建议收藏】
  13. 2022年信息安全工程师考试知识点:信息系统安全测评
  14. 2018金山WPS实习面试
  15. 我安装archlinux的过程总结
  16. html明月几时有古诗,古诗词赏析|苏轼《水调歌头·明月几时有》
  17. 属牛的女孩取名:优美文雅、声声入耳的女孩名字
  18. android 第三方 im,Android基于环信SDK开发IM即时聊天
  19. 配准带尺度点云的方法汇总
  20. 美国漫画历程的阳光面与阴暗面 | 经济学人全球早报精选

热门文章

  1. script标签的同步和异步
  2. 碰撞,处理碰撞,发射 Learn Unreal Engine (with C++)
  3. android所有颜色代码
  4. 双向绑定v-bind
  5. API网关从入门到放弃
  6. jzoj4640. 【GDOI2017模拟7.15】妖怪
  7. web项目jsp中无法引入js问题
  8. 【LeetCode】拓扑排序
  9. OpenCV人脸检测并把图片写成avi视频
  10. unicode 与 utf-8