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实现服务调用相关推荐

  1. SpringCloud Hoxton版微服务-入门篇

    SpringCloud Hoxton.SR9初级版 文章目录 SpringCloud Hoxton.SR9初级版 前言 一.架构选型 二.父工程创建 1.创建maven工程: 2.全局设置编码: 3. ...

  2. SpringCloud Hoxton版微服务- Ribbon实现负载均衡

    Ribbon实现负载均衡 Ribbon概念 一.Ribbon策略 二.配置使用 1.编写服务提供者 2.编写服务消费者 3.测试负载均衡随机策略 Ribbon概念 Spring Cloud Ribbo ...

  3. SpringCloud Hoxton版微服务-RestTempalte + @LoadBlanced 实现负载均衡

    RestTempalte + @LoadBlanced 实现负载均衡 一.服务提供者注册 二.服务消费者调用 1.编写服务消费者 2.RestTemplate中开启负载均衡支持 3.启动服务测试 总结 ...

  4. SpringCloud Hoxton版微服务- Gateway网关

    Gateway网关 一.Gateway概念 二.三大核心概念 1.Route (路由) 2.Predicate (断言) 3.Filter (过滤) 三.工作流程图 四.工程搭建 1.新建Gatewa ...

  5. SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用

    什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...

  6. JavaEE 企业级分布式高级架构师(十三)微服务框架 SpringCloud (H 版)(1)

    Spring Cloud学习笔记 Spring Cloud入门 分布式技术图谱 Spring Cloud简介 官网介绍 百度百科 总结 Spring Cloud的国内使用情况 Spring Cloud ...

  7. SpringCloud(若依微服务版)读取Nacos中的配置以及多个服务共享Nacos配置的使用

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...

  8. SpringCloud(13)之微服务的现状和未来

    一.微服务的现状和未来 1.服务架构的演变 1.1单体架构         单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层.  单体架构只适 ...

  9. SpringCloud及SpringCloudAlibaba微服务组件

    目录 1 微服务架构概述 什么是微服务 服务注册中心: 服务调用: 服务调用2: 服务降级: 服务网关: 服务配置: 服务总线: 1 微服务架构概述 什么是微服务 微服务是一种架构模式,他提倡将单一应 ...

最新文章

  1. Redis的自白:我为什么在单线程的这条路上越走越远?
  2. web报表移动端如何进行移动设备绑定与撤销
  3. telegram 组(groups) 和 频道(channels) 简介
  4. CSS实现英文或拼音单词首字母大写
  5. 全面解析虚拟内存概念
  6. 项目中遇到问题的解决方法合集
  7. jq获取id的名称_查找 Linux 发行版名称、版本和内核详细信息 | Linux 中国
  8. 网卡vlan标签_硬核来了,VLAN揭秘!!!
  9. 谷歌浏览器连接超时_技术丨常见在线课堂网络连接网络视频播放的解决方案...
  10. ffmpeg编解码命令(包含YUV编码到常见视频格式文件)
  11. 化学式中间的点怎么打?
  12. 计算机二级考试真题李阳答案,英语二级笔译_二级笔译培训_二级笔译真题 - 沪江英语...
  13. 推荐一个Github上很酷的开源项目——The Octo-Bouncer
  14. 2009年是垂直搜索引擎的春天还是迷途?
  15. 【ArchSummit】Web3.0去中心化预言机网络技术剖析
  16. 打开文件位置在计算机游戏里面,Win7电脑“打开或关闭windows功能”里面没有游戏文件夹的修复方法...
  17. 云和恩墨数据库MogDB荣获2021年度IT168最佳创新产品奖
  18. 学硕 申请清华计算机博士,2017年清华大学申请考核制考博成功经验谈
  19. swf 文件 打包 exe 方法
  20. 一些WM消息与其相应WPARAM,LPARAM的定义

热门文章

  1. php 聚合和组合,reduce端连接-分区分组聚合(示例代码)
  2. 信息学奥赛一本通 1066:满足条件的数累加 | OpenJudge NOI 1.5 10
  3. 打印字符(信息学奥赛一本通-T1021)
  4. 与圆相关的计算(信息学奥赛一本通-T1014)
  5. 4 FI配置-财务会计-创建会计科目表或总账科目表(COA-Chart of Account)
  6. 日语学习-多邻国-平假名3
  7. mysql binlog purge_正确清理mysql binlog日志方法
  8. OpenCV辅助对象(help objects)(5)_DataType
  9. 最最基础的Android倒计时应用
  10. [水动力学] 水动力学期末复习