当前位置: 首页 > ai >正文

5、openfeign

依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--没有这个包,nacos-config会报错-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.3</version>
</dependency>
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-hc5</artifactId><version>13.1</version>
</dependency>

配置文件

server:port: 8081spring:application:name: ms1cloud:nacos:discovery:server-addr: localhost:8848#如果没有spring-cloud-starter-bootstrap,需要加上该配置#config:#use-legacy-processing: truefeign:client:config:default:connectTimeout: 5000# 设置feign的读取超市时间,默认60sreadTimeout: 5000# 更换http客户端httpclient:hc5:enabled: truecompression:request:enabled: true# 最小触发压缩的大小,只有超过这个大小的请求才会进行压缩min-request-size: 2048# 触发压缩的数据类型mime-types: text/xml,application/xml,application/jsonresponse:enabled: truelogging:level:com.jrb.ms1.feign: debug

启动类

@EnableFeignClients(basePackages = "com.jrb.ms1.feign")

配置类

RequestInterceptor拦截器

@Component
public class MyFeignRequestInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {System.out.println("每次feign调用,都会经过该拦截器");template.header("x-token", UUID.randomUUID().toString());}
}

FeignConfig

@Configuration
public class FeignConfig {@Beanpublic Retryer retryer() {// 默认this(100, SECONDS.toMillis(1), 5);// 首次重试延迟 100 毫秒,之后每次重试的延迟时间逐渐增加,但最大延迟不超过 1 秒,并且最多重试 3 次return new Retryer.Default(100, 1, 3);}// 开启Feign调用日志:bean + logging.level.com.jrb.ms1.feign=debug@Beanpublic Logger.Level feignLoggerLevel() {return Logger.Level.FULL;}
}

ms2Feign

@FeignClient("ms2")
public interface ms2Feign {// 如果有工程路径要加工程路径@PostMapping("/aa")String aa();@PostMapping("/bb")String bb(@RequestParam("name") String name, @RequestParam("age") int age);@PostMapping("/cc/{name}/{age}")String cc(@PathVariable("name") String name, @PathVariable("age") int age);@PostMapping("/dd")String dd(@RequestBody FeignEntity feignEntity);@PostMapping("/ee")String ee(@RequestBody Map<String, Object> reqMap);@PostMapping("/ff")String ff(@RequestHeader("Authorization") String auth, @RequestBody Map<String, Object> reqMap);}

请求方controller

@RestController
public class OpenFeignDemoController1 {@Resourceprivate ms2Feign ms2;@GetMapping("/a")public String a() {try {return ms2.aa();} catch (Exception e) {e.printStackTrace();return "111";}}@GetMapping("/b")public String b() {return ms2.bb("张三", 18);}@GetMapping("/c")public String c() {return ms2.cc("张三", 18);}@GetMapping("/d")public String d() {return ms2.dd(new FeignEntity("张三", 18));}@GetMapping("/e")public String e() {Map<String, Object> reqMap = new HashMap<>();reqMap.put("name", "张三");reqMap.put("age", 18);return ms2.ee(reqMap);}@GetMapping("/f")public String f() {Map<String, Object> reqMap = new HashMap<>();reqMap.put("name", "张三");reqMap.put("age", 18);return ms2.ff("abcdefg", reqMap);}
}

服务方controller

@RestController
public class OpenFeignDemocontroller2 {@PostMapping("/aa")public String aa() {return "aa=>";}@PostMapping("/bb")public String bb(String name, int age) {return "bb=>" + name + age;}@PostMapping("/cc/{name}/{age}")public String cc(@PathVariable("name") String name, @PathVariable("age") int age) {return "cc=>" + name + age;}@PostMapping("/dd")String dd(@RequestBody FeignEntity feignEntity) {return "dd=>" + feignEntity;}@PostMapping("/ee")String ee(@RequestBody Map<String, Object> reqMap) {return "ee=>" + reqMap;}@PostMapping("/ff")String ff(@RequestBody Map<String, Object> reqMap, HttpServletRequest request) {String authorization = request.getHeader("Authorization");String token = request.getHeader("x-token");return "ee=>" + reqMap + authorization + "token:" + token;}
}
http://www.xdnf.cn/news/659.html

相关文章:

  • 初识javascript
  • C++11特性补充
  • 【Ollama:本地LLM工具】
  • JavaScript 位掩码常量教程
  • MySQL 视图
  • Python内存管理之隔代回收机制详解
  • Redis 缓存—处理高并发问题
  • 宝塔面板部署 Dify-latest 最新版本
  • 第38讲|AI + 农业病虫害预测建模
  • Nacos配置中心客户端加载配置文件源码解析
  • 密码学数据加密标准DES
  • 使用Python可视化洛伦兹变换
  • C语言笔记(鹏哥)上课板书+课件汇总(结构体)-----数据结构常用
  • Keil MDK 编译问题:last line of file ends without a newline
  • 基于计算机视觉的行为检测:从原理到工业实践
  • OpenCV 将彩色图像转换为单通道灰度图像 cv2.cvtColor
  • 线性DP:数字三角形
  • 2.1 基于委托的异步编程方法
  • 在FVM(有限体积法)的CFD仿真中,AI和机器学习的应用
  • npm link 使用指南
  • 【Rust 精进之路之第11篇-借用·实践】切片 (Slices):安全、高效地引用集合的一部分
  • Day96 | 灵神 | 二叉树 相同的树
  • javaSE.队列
  • Vue.js 简介
  • PCL库编译指南
  • 自然语言处理(9)—— 共现词矩阵及Python实现
  • MySQL完整版进阶及附录
  • STM32 HAL 水位传感器驱动程序
  • WEMOS LOLIN32 开发板引脚布局和技术规格
  • Python数据可视化领域的卓越工具:深入剖析Seaborn、Plotly与Pyecharts