SpringCloud Hoxton版微服务- OpenFeign实现服务调用
openfeign服务调用
- 一、OpenFeign概念
- 二、OpenFeign使用步骤
- 1.依赖
- 2.添加注解支持
- 3.注解业务类调用
- 三、OpenFeign超时控制
- 1、服务提供者
- 2、服务消费者
- 四、OpenFeign日志打印
- 总结
一、OpenFeign概念
OpenFeign,简单的理解为Feign的升级版。Feign和OpenFeign作用一样,都是进行远程调用的组件。里面都内置了Ribbon。一般都是加在消费端的注解,让消费端可以调用其他生产者的服务。
Feign是一个声明式的Web Service客户端。它的出现使开发Web Service客户端变得很简单。使用Feign只需要创建一个接口加上对应的注解,比如:FeignClient注解。Feign有可插拔的注解,包括Feign注解和JAX-RS注解。
Feign也支持编码器和解码器,Spring Cloud Open Feign对Feign进行增强支持Spring MVC注解,可以像Spring Web一样使用HttpMessageConverters等。
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。
二、OpenFeign使用步骤
1.依赖
<!-- openfeign服务调用 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.添加注解支持
@EnableFeignClients :开启Feign服务调用支持
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
@RibbonClient(name = "provider-service", configuration = MyRuleConfig.class) //自定义负载均衡算法
@EnableFeignClients //开启Feign服务调用
public class OrderAppMain {public static void main(String[] args) {SpringApplication.run(OrderAppMain.class,args);}
}
3.注解业务类调用
@FeignClient(value = “provider-service”) :调用服务提供者名称即可
/*** @description: 服务调用接口* @author: ydf* @date: 2020/12/3 14:49* @version: v1.0*/
@FeignClient(value = "provider-service")
public interface PaymentFeignService {@GetMapping(value = "/payment/get/{id}")CommentResult<Payment> getPaymentById(@PathVariable("id") Long id);@GetMapping(value = "/payment/consul")String paymentConsul();
}
OrderController.class 控制器:
/**
* 调用服务
* @param id 支付ID
* @return 返回
*/
@GetMapping("/consumer/get/{id}")
public CommentResult<Payment> getInfo(@PathVariable("id") Long id){CommentResult<Payment> payment = paymentFeignService.getPaymentById(id);log.info("调用支付服务端查询结果:{}",payment);return payment;
}
三、OpenFeign超时控制
当服务提供者提供的业务认为3秒钟是正常的,然而服务消费者只愿意接受两秒钟内的业务,这样他们之间就产生了时间差,
1、服务提供者
/**
* 服务超时
* @return 返回端口号
*/
@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeout(){try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}return serverPort;
}
2、服务消费者
业务接口:
@FeignClient(value = "provider-service")
public interface PaymentFeignService {@GetMapping("/payment/feign/timeout")String paymentFeignTimeout();
}
控制器:
/**
* 测试服务超时* @return 返回*/
@GetMapping("/consumer/payment/feign/timeout")
String paymentFeignTimeout(){//openfeign客户端默认等待1秒钟return paymentFeignService.paymentFeignTimeout();
}
9001服务提供者自测超时:
8001服务消费者测试超时:
默认等待一秒钟,运行超时,Read timed out executing:不在能接受的时间范围内,客户端请求等待超时,报错
1、假设有点业务接口可能需要超过一秒钟等待,此时我们需要去配置超时:
#设置feign客户端超时时间(OpenFeign默认支持Ribbon)
ribbon:ReadTimeout: 5000 #处理请求的超时时间,默认为1秒ConnectTimeout: 5000 #连接建立的超时时长,默认1秒MaxAutoRetries: 1 #同一台实例的最大重试次数,但是不包括首次调用,默认为1次MaxAutoRetriesNextServer: 0 #重试负载均衡其他实例的最大重试次数,不包括首次调用,默认为0次OkToRetryOnAllOperations: false #是否对所有操作都重试,默认false
重启服务再次测试:
四、OpenFeign日志打印
OpenFeign的日志级别有:
NONE: 默认的,不显示任何日志
BASIC: 仅记录请求方法、URL、响应状态码以及执行时间
HEADERS:除了BASIC 中自定义的信息外,还有请求和响应的信息头
FULL: 除了HEADERS中定义的信息外, 还有请求和响应的正文以及元数据。
1、新建配置类:
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @description: 配置OpenFeign日志打印* @author: ydf* @date: 2021/1/1 18:23* @version: v1.0*/
@Configuration
public class OpenFeignLogConfig {@BeanLogger.Level feignLoggerLeave(){return Logger.Level.FULL;}
}
Level.FULL: openfeign默认为详情信息日志。
2、构建yml,配置那个接口需要以什么日志级别监控
logging:level:# feign日志以什么级别监控哪个接口com.dtydf.springcloud.service.PaymentFeignService: debug
总结
在springcloud中,OpenFeign是取代了feign作为负载均衡组件的,feign最早是netflix提供的,他是一个轻量级支持RESTful的http服务调用框架,内置了ribbon,而ribbon可以提供负载均衡机制,因此feign可以作为一个负载均衡的远程服务调用框架使用。feign后来不升级了,被github的OpenFeign取代,OpenFeign在feign的基础上,又支持springmvc注解的功能。
SpringCloud Hoxton版微服务- OpenFeign实现服务调用相关推荐
- SpringCloud Hoxton版微服务-入门篇
SpringCloud Hoxton.SR9初级版 文章目录 SpringCloud Hoxton.SR9初级版 前言 一.架构选型 二.父工程创建 1.创建maven工程: 2.全局设置编码: 3. ...
- SpringCloud Hoxton版微服务- Ribbon实现负载均衡
Ribbon实现负载均衡 Ribbon概念 一.Ribbon策略 二.配置使用 1.编写服务提供者 2.编写服务消费者 3.测试负载均衡随机策略 Ribbon概念 Spring Cloud Ribbo ...
- SpringCloud Hoxton版微服务-RestTempalte + @LoadBlanced 实现负载均衡
RestTempalte + @LoadBlanced 实现负载均衡 一.服务提供者注册 二.服务消费者调用 1.编写服务消费者 2.RestTemplate中开启负载均衡支持 3.启动服务测试 总结 ...
- SpringCloud Hoxton版微服务- Gateway网关
Gateway网关 一.Gateway概念 二.三大核心概念 1.Route (路由) 2.Predicate (断言) 3.Filter (过滤) 三.工作流程图 四.工程搭建 1.新建Gatewa ...
- SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用
什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...
- JavaEE 企业级分布式高级架构师(十三)微服务框架 SpringCloud (H 版)(1)
Spring Cloud学习笔记 Spring Cloud入门 分布式技术图谱 Spring Cloud简介 官网介绍 百度百科 总结 Spring Cloud的国内使用情况 Spring Cloud ...
- SpringCloud(若依微服务版)读取Nacos中的配置以及多个服务共享Nacos配置的使用
场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...
- SpringCloud(13)之微服务的现状和未来
一.微服务的现状和未来 1.服务架构的演变 1.1单体架构 单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层. 单体架构只适 ...
- SpringCloud及SpringCloudAlibaba微服务组件
目录 1 微服务架构概述 什么是微服务 服务注册中心: 服务调用: 服务调用2: 服务降级: 服务网关: 服务配置: 服务总线: 1 微服务架构概述 什么是微服务 微服务是一种架构模式,他提倡将单一应 ...
最新文章
- Redis的自白:我为什么在单线程的这条路上越走越远?
- web报表移动端如何进行移动设备绑定与撤销
- telegram 组(groups) 和 频道(channels) 简介
- CSS实现英文或拼音单词首字母大写
- 全面解析虚拟内存概念
- 项目中遇到问题的解决方法合集
- jq获取id的名称_查找 Linux 发行版名称、版本和内核详细信息 | Linux 中国
- 网卡vlan标签_硬核来了,VLAN揭秘!!!
- 谷歌浏览器连接超时_技术丨常见在线课堂网络连接网络视频播放的解决方案...
- ffmpeg编解码命令(包含YUV编码到常见视频格式文件)
- 化学式中间的点怎么打?
- 计算机二级考试真题李阳答案,英语二级笔译_二级笔译培训_二级笔译真题 - 沪江英语...
- 推荐一个Github上很酷的开源项目——The Octo-Bouncer
- 2009年是垂直搜索引擎的春天还是迷途?
- 【ArchSummit】Web3.0去中心化预言机网络技术剖析
- 打开文件位置在计算机游戏里面,Win7电脑“打开或关闭windows功能”里面没有游戏文件夹的修复方法...
- 云和恩墨数据库MogDB荣获2021年度IT168最佳创新产品奖
- 学硕 申请清华计算机博士,2017年清华大学申请考核制考博成功经验谈
- swf 文件 打包 exe 方法
- 一些WM消息与其相应WPARAM,LPARAM的定义
热门文章
- php 聚合和组合,reduce端连接-分区分组聚合(示例代码)
- 信息学奥赛一本通 1066:满足条件的数累加 | OpenJudge NOI 1.5 10
- 打印字符(信息学奥赛一本通-T1021)
- 与圆相关的计算(信息学奥赛一本通-T1014)
- 4 FI配置-财务会计-创建会计科目表或总账科目表(COA-Chart of Account)
- 日语学习-多邻国-平假名3
- mysql binlog purge_正确清理mysql binlog日志方法
- OpenCV辅助对象(help objects)(5)_DataType
- 最最基础的Android倒计时应用
- [水动力学] 水动力学期末复习