OpenFeign服务调用

Spring Cloud OpenFeign:声明式服务调用 OpenFeign是声明式的服务调用工具,我们只需创建一个接口并用注解的方式来配置它,就可以实现对某个服务接口的调用,简化了直接使用RestTemplate来调用服务接口的开发量。OpenFeign具备可插拔的注解支持,同时支持OpenFeign注解、JAX-RS注解及SpringMvc注解。 阅读详情

前言

Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。只需要创建一个接口并在接口上添加注解即可。
它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HTTPMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

Feign 能干什么?

Feign旨在使编写Java Http客户端变得更容易
在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装,这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前时Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。

Feign集成了Ribbon:
利用Ribbon维护了服务列表信息,并通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且声明式的方法,优雅而简单的实现了服务调用

本章的OpenFeign是根据:

我们在Eureka注册与发现的例子上稍作修改https://blog.youkuaiyun.com/javaasd/article/details/108791307

把客户端:cloud-consumer-order80给舍弃掉。
除了这个客户端,其余的四个项目正常启动,7001,7002,8001和8002。

然后我们在创建一个客户端:cloud-consumer-feign-order80

第一步:pom.xml中引入jar包依赖

 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
 </dependency>
 <!-- 引入Eureka Client -->
 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>

第二步:配置application.yml配置文件

server:
  port: 8083

eureka:
  client:
    #向注册中心注册自己(eureka server)
    register-with-eureka: false
    service-url:
      #设置与eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka  #集群

第三步:创建启动类

@SpringBootApplication
@EnableFeignClients  //激活开启feign
public class OrderFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderFeignMain80.class,args);
    }
}

第四步:创建service接口

@Component
//调用Eureka服务下的注册服务项
@FeignClient(name = "CLOUD-PAYMENT-SERVICE") 
public interface PaymentFeignService {
    //服务项下的controller类里面的方法接口
    @GetMapping(value = "/payment/getPaymentById/{id}")
    CommonResult getPaymentById(@PathVariable("id") Integer id);
}

第五步:创建controller

@RestController
public class OrderFeignController {
    //调用接口
    @Resource
    private PaymentFeignService paymentFeignService;
    
    @GetMapping(value = "/consumer/payment/getPaymentById/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Integer id){
        return paymentFeignService.getPaymentById(id);
    }
}

最后启动cloud-consumer-feign-order80访问http://localhost:8083/consumer/payment/getPaymentById/9

在这里插入图片描述

超时控制

在8001服务端的controller层的一个类中,模拟一个复杂的逻辑处理,它需要三秒的时间

    //模拟这是一个复杂的业务逻辑,程序需要执行三秒钟
    @GetMapping("/payment/feign/timeout")
    public String paymentFeignTimeout(){
        try {
            TimeUnit.SECONDS.sleep(3);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        return serverPort;
    }

然后在80客户端的service层添加一下代码

    @GetMapping("/payment/feign/timeout")
    String paymentFeignTimeout();

controller层

    @GetMapping("/consumer/payment/feign/timeout")
    public String paymentFeignTimeout(){
        //OpenFeign-ribbon默认等待1秒,这个时候这个程序需要等待三秒,
        // 三秒过后会报连接超时的错误
        return paymentFeignService.paymentFeignTimeout();
    }

然后启动80客户端。我们直接访问服务端接口http://localhost:8001/payment/feign/timeout 等待三秒是可以正常的访问的到的。但通过用户端80去访问服务端的8001里面的接口会报错(报错内容如下)

在这里插入图片描述
这个错误就是连接超时。因为这个代码的执行时间是三秒,而用户端80,它只等待一秒,一秒钟后没有等到结果,就会直接报连接超时。

这个时候我们需要修改一下用户端80,的application.yml加上超时配置即可

server:
  port: 8083

eureka:
  client:
    #向注册中心注册自己(eureka server)
    register-with-eureka: false
    service-url:
      #设置与eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka  #集群
#设置OpenFeign客户端连接超时时间
ribbon:
  #建立连接所用的时间,适用于网络状态正常的情况下,二端连接所用时间
  ReadTimeout: 5000
  #建立连接后从服务器读取到可用资源所用的时间
  connectTimeout: 5000

重启项目即可正常访问

OpenFeign日志打印功能

Feign 提供了日志打印功能,我们可以通过配置来调整日期级别,从而了解Feign种的Http请求的细节。所白了就是对Feign接口的调用情况进行监控和输出。

日志级别:
1.NONE:默认的,不显示任何日志
2.BASIC:仅记录请求方法、url、响应状态及执行时间
3.HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息。
4.FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据

用法(80用户端)

第一步需要写一个日志工具类

@Configuration
public class FeignConfig {
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

第二步修改application.yml文件

server:
  port: 8083

eureka:
  client:
    #向注册中心注册自己(eureka server)
    register-with-eureka: false
    service-url:
      #设置与eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka  #集群
#设置OpenFeign客户端连接超时时间
ribbon:
  #建立连接所用的时间,适用于网络状态正常的情况下,二端连接所用时间
  ReadTimeout: 5000
  #建立连接后从服务器读取到可用资源所用的时间
  connectTimeout: 5000
logging:
  level:
    #日志以哪个级别监控哪个接口
    com.atguigu.springcloud.service.PaymentFeignService: debug

第三步:重启80用户端口,然后随便访问一个接口。
最后看一下控制台输出

在这里插入图片描述
到此OpenFeign服务调用结束!

【SpringCloud】12、Spring Cloud使用OpenFeign实现服务调用 OpenFeign目前是Spring Cloud的二级子项目。它是一个声明式、模板化的HTTP客户端,仅在Application Client中使用。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程HTTP请求。学习完OpenFeign后可以不使用RestTemplate进行调用。Spring Cloud的声明式调用,可以做到使用HTTP请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。 阅读详情

相关推荐

【Mac+CLion+STM32+JLink】从零到一:在macOS上构建高效STM32开发与调试工作流

本文详细介绍了在macOS上使用CLion、STM32CubeMX和JLink搭建高效STM32开发与调试工作流的完整指南。从环境准备、CLion深度配置到STM32CubeMX工程实战,再到JLink烧录避坑和串口调试技巧,帮助开发者快速掌握Mac平台下的嵌入式开发全流程。

weixin_28278377的博客 254

SpringCloud Alibaba微服务 -- OpenFeign的使用(保姆级)

openfeign的使用、springcloud微服务之间的调用,fallback的使用

知道的越多 不知道的就越多 1万+

Linux下安装FastDFS及生成缩略图

1. 安装编译环境 yum install git gcc gcc-c++ make automake vim wget libevent -y 2. 安装libfastcommon基础库 mkdir /root/fastdfs cd /root/fastdfs git clone https://github.com/happyfish100/libfastcommon.git --depth 1 cd libfastcommon/ ./make.sh && ./make.sh ins

weixin_45234710的博客 1373

微服务间的远程接口调用:OpenFeign的使用并理解原理

Feign

qq_42582773的博客 5297

2026年北京君正数字IC笔试试卷带答案

本文摘要:该文档是一份数字IC设计相关的考试试题,包含单选题、多选题、波形分析题和代码设计题。内容涵盖时序约束、半导体工艺、状态机设计、逻辑综合、异步FIFO设计等知识点。试题解析详细,重点考察数字电路基础、时序分析和Verilog代码实现能力。典型题目包括多周期路径设置、Moore/Mealy状态机区别、同步复位与异步复位特性、RISC-V架构特点等,并提供了异步FIFO的Verilog实现参考代码。(149字)

Open 112

手把手教你学Simulink--智能控制算法的控制算法领域仿真建模实例:基于Simulink的遗传算法优化控制仿真模型

通过上述步骤,你可以设计并仿真一个基于Simulink的遗传算法优化控制模型。这种方法适用于许多复杂的优化场景,尤其是当传统方法难以找到最优解时。随着经验的积累,你可以进一步优化遗传算法的参数设置,或者结合其他智能优化技术(如粒子群优化、差分进化等)提升优化性能。

MHD0815的博客 208

openFein 调用webservice,soap+xml

openfeign调用webservice,soap+xml

qq_40301204的博客 2970

基于Keil软件实现对射式红外传感器计次 (江协科技HAL库)

用HAL库复现江协科技,让嵌入式学习之路更顺畅。

2401_82728381的博客 798

初识 OpenFeign 服务接口调用

官网:https://cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud-openfeign Feign 简介: Feign 是一个声明式 WebService 客户端。使用 Feign 能让编写Web Service 客户端更加简单。 它的使用方法是定义一个服务接口然后在上面添加注解。...

深海的鱼 1639

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集的建立

运动物体的微多普勒效应为人体动作识别提供了可能,基于雷达的居家检测具有良好的隐私保护性,且不易受环境因素影响(如光照、温度等),近年来已受到国内外学者的广泛关注。基于雷达与深度学习的摔倒检测使用自建的雷达数据集进行人体摔倒检测的研究。雷达数据集的建立分为雷达数据采集和雷达数据处理两部分工作。

洋洋Young的博客 3403

音视频开发基础(1):模拟视频技术简介

模拟视频技术是指用模拟技术对动态影像进行捕捉、记来、处理、存储、传输、复现的技术.模拟视频技术的发明、发展与模拟电视系统的发展密不可分.下面将通过模拟电视系统来介绍模拟视频技术中的基本概念. 首先,人的视觉系统的特征为电视等視稿系铳的发明、发展提供了理论依据.光线通过角膜、腫孔、晶状体的折射光线.透过玻璃体到达视网展.视网膜上分布着光感受器,光感受器在光线的剌激下...

琅嬛福地 1492

【SpringCloud10】OpenFeign服务接口调用

OpenFeign服务接口调用

qq_45291280的博客 1875

【科研数据获取】根据Excel表个中的企业/公司信息批量获取经纬度坐标,并进行地图可视化

批量获取企业/公司的经纬度坐标,并进行地图可视化1 需求2 实现途径3 需求逐步实现 1 需求 在做项目的时候,老板或者项目答辩时候甲方最喜欢看到的就是可视化结果,尤其是涉及到地图可视化。很多时候会遇到企业/公司的数据,想要做地图可视化,必不可少的就是要获取它们具体地址:第一种就是像查户口一样精准一下具体的城镇街道,还有一种就是经纬度信息,前一种属于文字内容往往用于管理方面,第二种数字信息多用于数据处理与分析。 2 实现途径 获取地理信息数据,自然需要使用到地图的功能,这里直接采用百度地图的拾取坐标系统,

lys_828的博客 2336

openFeign服务调用

文章目录openFeign设计原理传统http请求流程openFeign流程实践 openFeign设计原理 openFeign是轻量级的Http请求框架,不再像restTemplate那样显式声明请求URL,参数,返回类型,直接通过模块化的思想,将服务调用层封装为一个模块,在controller层像调用普通service那样调用,相对更加直观。封装了Http调用流程,更适合面向接口化的变成习惯 传统http请求流程 类似httpclient,restTemplate,OkHttp都是如此 openFei

kevin的博客 1747

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

微服务(七)——OpenFeign服务调用

Feign能干什么Feign旨在服务调用时,使编写Java Http客户端变得更容易。前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口......

不愿意做鱼的小鲸鱼の博客 1392

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OpenFeign实现服务调用

Feign是一个声明式WebService客户端。使用Feign能让编写WebService客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可插拔式的编码和解码器。Spring Cloud对feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

weixin_72525373的博客 826

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

6_OpenFeign实现服务调用

????写在前面:前面我们使用 Eureka 注册中心注册服务,在服务端使用 Ribbon + RestTemplate模板 进行服务调用,但是如果想要调取服务提供者提供的多个服务,一个一个进行方法调用岂不是比较麻烦 ?Feign 使用在客户端还是服务端 ?为什么说Feign只需要一个接口一个注解就可实现服务调用 ? Feign 和 OpenFeign 有什么不一样 ?使用了 OpenFeign 会不会出现调取不到服务的情况 ?如果想要查看 OpenFeign 的详细调用情况,该怎么办 ? 6_Ope

多回头看一看 395

SpringCloud OpenFeign声明式服务调用

SpringCloud OpenFeign声明式服务调用

12程序猿的博客 985

SpringCloud服务调用 OpenFeign

Feign是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需 创建一个接口并在接口上添加注解即可。 OpenFeign 是Spring Cloud 在Feign 的基础上支持了SpringMVC 的注解,如@RequestMapping等。OpenFeign 的@FeignClient 可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。 Feign自带负载均衡配置项。 首先向注册中心注册微服务

zxg的博客 2128

SpringCloud-服务调用-OpenFeign

服务调用 openfeign rpc

心流时间的博客 1415

【Springcloud】OpenFeign服务调用

【Springcloud】(06)中级搭建-OpenFeign服务调用(1)OpenFeign是什么(1.1)基本介绍(1.2)Feign能干什么?(1.3)Feign集成了Ribbon(2)OpenFeign服务调用(2.1)第一步:创建新的模块,并修改pom(2.2)第二步:创建配置文件yml(2.3)第三步:创建启动类(2.4)第四步:创建service接口,用来连接8001服务的方法(2....

weixin_44823875的博客 1379

一文看懂Openfeign服务调用原理

OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。 OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

叔牙的专栏 1713

OpenFeign:声明式服务调用

OpenFeign 声明式服务调用

woruosuifenglang的博客 571

基于OpenFeign的服务调用

一 OpenFeign是什么 OpenFeign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。 Nacos很好的兼容了OpenFeign, OpenFeign默认集成了 Ribbon, 所以在Nacos下使用OpenFeign默认就实现了负载均衡的效果。 二 OpenFeign的引入 1 引入依赖 service模块中配置OpenFeign的pom依赖(实际是在服务消费者端需要OpenFeign的

实践求真知 968
上一篇: Ribbon负载均衡
下一篇: Java8新特性简介
与黑夜为伍
博客等级 码龄7年 19粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值