SpringCloud(三)之Feign实现负载均衡的使用
一 点睛
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实现负载均衡的使用相关推荐
- nginx(三)反向代理和负载均衡
nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...
- springcloud 实现反向代理和负载均衡
springcloud 实现反向代理和负载均衡 1. 搭建注册中心,路由服务zuul,两个服务端 参考我的上一篇博客 springcloud项目搭建 注意两个服务端服务名称要相同,端口不能相同配置如下 ...
- openfeign ribbon 负载_SpringCloud教程(三)声明式访问Feign、负载均衡Ribbon
0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...
- JavaEE进阶知识学习-----SpringCloud(六)Ribbon负载均衡
Ribbon负载均衡 Ribbon概述 Spring Cloude Ribbon是基于Netfilx Ribbon实现的一套客户端 负载均衡的工具,简单说,Ribbon是Netfilix发布的开源项目 ...
- SpringCloud源码:Ribbon负载均衡分析
本文主要分析 SpringCloud 中 Ribbon 负载均衡流程和原理. SpringCloud版本为:Edgware.RELEASE. 一.时序图 和以前一样,先把图贴出来,直观一点: 二.源码 ...
- SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)...
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册 ...
- SpringCloud组件:Ribbon的负载均衡策略及原理
来源:blog.csdn.net/wudiyong22/article/details/80829808 Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法 ...
- 阿里云大学 ECS实践(三)ECS+SLB 负载均衡实践
ECS+SLB 负载均衡实践 ECS+SLB 负载均衡实践 背景知识 阿里云负载均衡 简介 架构 特点 产品优势 云服务器状态确认 负载均衡配置 进入阿里云控制台: 通过负载均衡业务配置向导,配置负载 ...
- SpringCloud Alibaba 实战之《负载均衡:Ribbon 如何保证微服务的高可用》
上一讲我们对 Nacos 的集群环境与实现原理进行了讲解,我们已经可以轻松将单个微服务接入到 Nacos 进行注册,但是微服务本不是孤岛,如何实现有效的服务间稳定通信是本文即将介绍的主要内容,本次我们 ...
最新文章
- MySQL主从复制故障案例一
- 如何增加SAP_ALL的权限
- oracle9I收缩表,Oracle 9i删除数据表(转)
- static void SetSysClockTo72(void)的一些理解
- QT 提示之右下角冒泡
- 深度学习数据标注工具(转)
- MySql Cluster 集成安装,Centos,坑点集锦
- WCF探索之旅(五)——WCF与WebService的异同
- RFIC4463_F2C
- 公司内网环境下部署流量监控服务器的初步方案
- 霍尔元件在高斯计上的应用与工作原理
- 正交试验软件测试用例设计方法【建议收藏】
- 2022年信息安全工程师考试知识点:信息系统安全测评
- 2018金山WPS实习面试
- 我安装archlinux的过程总结
- html明月几时有古诗,古诗词赏析|苏轼《水调歌头·明月几时有》
- 属牛的女孩取名:优美文雅、声声入耳的女孩名字
- android 第三方 im,Android基于环信SDK开发IM即时聊天
- 配准带尺度点云的方法汇总
- 美国漫画历程的阳光面与阴暗面 | 经济学人全球早报精选