Open Feign

news/2024/9/25 0:36:19

1.Open Feign介绍

Spring Cloud OpenFeign是一种基于Spring Cloud的声明式REST客户端,它简化了与HTTP服务交互的过程。它将REST客户端的定义转化为Java接口,并且可以通过注解的方式来声明请求参数、请求方式、请求头等信息,从而使得客户端的使用更加方便和简洁。同时,它还提供了负载均衡和服务发现等功能,可以与Eureka、Consul等注册中心集成使用。Spring Cloud OpenFeign能够提高应用程序的可靠性、可扩展性和可维护性,是构建微服务架构的重要工具之一。

Feign是一个声明式的 Web Service 客户端。它使编写Web Service客户端更容易。要使用 Feign,需要创建一个接口并对其进行注解。它有可插拔的注解支持,包括 Feign 注解和 JAX-RS 注解。Feign 还支持可插拔的编码器和解码器。Spring Cloud 增加了对 Spring MVC 注解的支持,并支持使用 Spring Web 中默认使用的 HttpMessageConvertersSpring Cloud 集成了 Eureka、Spring Cloud CircuitBreaker以及Spring Cloud LoadBalancer,以便在使用Feign时提供一个负载均衡的http客户端。

2. Open Feign使用

2.1 引入依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.2 主启动类开启Open Feign注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients // 开启Open Feign
public class MainFeign80 {public static void main(String[] args) {SpringApplication.run(MainFeign80.class,args);}
}

2.3 定义Feign接口

@FeignClient(value = "cloud-payment-service", path = "/pay")
@RestController
public interface PayFeignApi {@Operation(summary = "新增支付订单信息")@PostMappingpublic ResponseResult<String> save(@RequestBody PayDTO payDTO);@Operation(summary = "删除支付订单信息")@DeleteMapping("/{id}")public ResponseResult<String> delete(@PathVariable("id") Integer id);@Operation(summary = "更新支付订单信息")@PutMappingpublic ResponseResult<String> update(@RequestBody PayDTO payDTO);@Operation(summary = "根据ID查询支付订单信息")@GetMapping("/{id}")public ResponseResult<PayVO> queryPayById(@PathVariable("id") Integer id);@Operation(summary = "查询所有订单信息")@GetMappingpublic ResponseResult<List<PayVO>> getPayList();
}

下面是我们的Feign实现的原始接口,通常是在另一个微服务模块中,当我们想要调用另一个微服务中的接口,可以使用Open Feign来调用

@RestController
@RequestMapping("/pay")
@Tag(name = "支付模块", description = "支付相关接口")
@RefreshScope
public class PayController {@Resourceprivate PayService payService;@Operation(summary = "新增支付订单信息")@PostMappingpublic ResponseResult<String> save(@RequestBody PayDTO payDTO){payService.save(payDTO);return ResponseResult.success();}@Operation(summary = "删除支付订单信息")@DeleteMapping("/{id}")public ResponseResult<String> delete(@PathVariable Integer id){payService.delete(id);return ResponseResult.success();}@Operation(summary = "更新支付订单信息")@PutMappingpublic ResponseResult<String> update(@RequestBody PayDTO payDTO){payService.updatePayById(payDTO);return ResponseResult.success();}@Operation(summary = "根据ID查询支付订单信息")@GetMapping("/{id}")public ResponseResult<PayVO> queryPayById(@PathVariable Integer id){return ResponseResult.success(payService.getPayById(id));}@Operation(summary = "查询所有订单信息")@GetMappingpublic ResponseResult<List<PayVO>> getPayList(){return  ResponseResult.success(payService.getPayList());}
}

2.4 使用Feign接口

@RestController
@RequestMapping("/feign/pay")
public class OrderFeignController {@Resourceprivate PayFeignApi payFeignApi;@Operation(summary = "新增支付订单信息")@PostMappingpublic ResponseResult saveOrder(@RequestBody PayDTO payDTO){return payFeignApi.save(payDTO);}@GetMapping("/{id}")@Operation(summary = "根据ID查询订单信息")public ResponseResult getOrderById(@PathVariable Integer id){return payFeignApi.queryPayById(id);}@DeleteMapping("/{id}")@Operation(summary = "删除订单信息")public ResponseResult deleteOrderById(@PathVariable Integer id){return payFeignApi.delete(id);}@PutMapping@Operation(summary = "更新订单信息")public ResponseResult updateOrderById(@RequestBody PayDTO payDTO){return payFeignApi.update(payDTO);}
}

2.5测试

3. 超时设置

我们可以在默认客户端和命名客户端上配置超时。OpenFeign 使用两个超时参数:

  • connectTimeout 防止因服务器处理时间过长而阻塞调用者。
  • readTimeout 从连接建立时开始应用,当返回响应的时间过长时就会被触发。
feign:httpclient:connection-timeout: 2000ok-http:read-timeout: 60s

4.超时重试

Open Feign默认情况下超时不进行重试,我们可以编写下面配置,让Open Feign超时进行重试。

@Configuration
public class FeignConfig {@Beanpublic Retryer retryer(){// 默认配置不进行重试return Retryer.NEVER_RETRY;}
}
@Configuration
public class FeignConfig {@Beanpublic Retryer retryer(){// 初始间隔100ms ,最大间隔1s, 重试次数(1+2)return new Retryer.Default(100,1,3);}
}

5. Feign日志

每个创建的 Feign 客户端都会创建一个logger。默认情况下,logger 的名字是用于创建Feign客户端的接口的全类名称。Feign 的日志只响应 DEBUG 级别。

application.yml

logging.level.project.user.UserClient: DEBUG

你可以为每个客户端配置 Logger.Level 对象,告诉 Feign 要记录多少内容。选择是:

  • NONE, 没日志(默认)。
  • BASIC, 只记录请求方法和URL以及响应状态代码和执行时间。
  • HEADERS, 记录基本信息以及请求和响应头。
  • FULL, 记录请求和响应的header、正文和元数据。

例如,下面将设置 Logger.LevelFULL

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/30890.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读:基于无监督集成聚类的开放关系抽取方法

谢斌红,李玉,赵红燕. 基于无监督集成聚类的开放关系抽取方法. 中文信息学报. 2022, 36(5): 49-58 相关工作关系抽取(RE)旨在从纯文本中抽取两个实体之间的关系,并以三元组形式进行描述。 传统的关系抽取方法主要是有监督的分类模型,需要一组预定义的关系标签和大量的标注数据…

2024广东大学生攻防大赛WP

Misc 猜一猜题目描述: 你们想要的flag就在压缩包里面。压缩包文件名 解密解压密码为a1478520 然后修改flag.png文件头得到扫描二维码之后 ❀❁❀❇❀✼❀❂✿❆✿✽❁❀✿✾❂❅✿❄❂❉❀✿❂❆❀❃❀✿❂❆✿❀❁✾✻✿❁❁❀❁❂❊✻❂✿❈=花朵解密 https://www.qqxiuzi.c…

struts实验

Java EE架构程序设计实验作业 实验名称:利用JSP+Struts2+JDBC+Mysql校园宿舍管理系统 一、实验项目功能 增加了学生登录系统的评价和建议功能,学生可以书写对学校宿舍或者管理员的评价和建议。可以进行修改和删除。 管理员登录系统可以查看所有的评鉴和建议,可以按照宿舍楼号…

C#实现图片转Base64字符串.并支持markdown文件打开展示

引用1.0.3版本或以上的Wesky.Net.OpenTools 包 1.0.3 版本提供图片转Base64字符串方案,并提供根据后缀名自动识别Mime类型,合成标准URI 开源项目地址: Gitee:https://gitee.com/dreamer_j/open-tools.git Github:https://github.com/LittleLittleRobot/OpenTools.git 为了简…

Tomcat中为什么要使用自定义类加载器

Tomcat 使用自定义类加载器主要是基于以下几个关键原因:1.应用隔离:Tomcat作为一个Web容器,能够同时部署和运行多个Web应用程序。每个应用可能依赖不同的库版本或者包含同名类,为了确保每个应用的类库相互独立,避免类冲突,Tomcat 为每个Web应用提供了一个独立的类加载器实…

OSCP靶机训练Kitoptrix Level 3

Vulnhub——KioptrixVM3 前期准备:kali攻击机:10.0.0.4 靶机:10.0.0.12 将两台机器都设置为NAT模式渗透过程: 第一步:存活主机探测 arp-scan -l第二步:端口扫描 nmap --min-rate 10000 -p- 10.0.0.12第三步:基本信息扫描 nmap -sT -sC -sV -O -p22,80 10.0.0.12第四步:…

OSCP靶机训练Kioptrix Level 4

Vulnhub——Kioptrix Level 4 前期准备:kali攻击机:10.10.10.12 靶机:10.10.10.15 将两台机器都设置为NAT模式渗透过程 1、首先是存活主机探测,确认目标是否在线 arp-scan -l2、然后对目标进行端口扫描, 确认目标开放了哪些端口以及服务3、开放了4个端口,首先目光集中在…

OSCP靶机训练Kioptrix Level 1

Vulnhub——Kioptrix Level 1 前期准备: ​ 1、kali攻击机:10.0.0.4 NAT模式 ​ 2、靶机:10.0.0.10 NAT模式 ​ 注意: ​ 该靶机默认为桥接模式,且在虚拟机中修改为NAT模式,在靶机启动之后又自动更改为了桥接模式 ​ 需要在靶机的配置文件中进行修改 ​ 将所有Bridg…