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

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;}
}

相关文章:

  • 对于在线教育或知识付费类网站视频处理方案
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.24)
  • 海拔与大气压关系,大气压单位,气压传感器对比
  • DeepSeek与ECharts融合助力复杂图表高效制作
  • 声音识别(声纹识别)和语音识别的区别
  • python爬虫复习
  • SpringBoot 知识图谱
  • 小迪第10天http/s数据包
  • uni-app中map的使用
  • idea中导入从GitHub上克隆下来的springboot项目解决找不到主类的问题
  • FastAPI:现代高性能Python Web框架的技术解析与实践指南
  • PCA 降维实战:从原理到电信客户流失数据应用
  • Vue如何实现样式隔离
  • QML中日期处理类
  • Oracle 23ai Vector Search 系列之6 向量相似性搜索(Similarity Search)
  • SpringBoot3集成ES8.15实现余额监控
  • 2. 什么是最普通的自动化“裸奔状态”?
  • 【Rust基础】使用Rocket从Token中提取用户信息
  • (mac)Grafana监控系统之监控Linux的Redis
  • Java基础类库常用类库 java.lang、java.util
  • 广西出现今年首场超警洪水
  • 2025年青年普法志愿者法治文化基层行活动启动
  • 释新闻|特朗普喊话鲍威尔早点走人,美国总统能否解雇美联储主席?
  • 中央宣传部原副部长张建春被提起公诉
  • 湖南省委书记人民日报撰文:坚定不移贯彻总体国家安全观,更好统筹高质量发展和高水平安全
  • 上海铁三浓度越来越高,长三角国际铁人三项赛下月开赛