记录SpringBoot集成Feign以及所遇到的坑

一、通过Feign进行远程服务调用

数据库表信息

1 SET NAMES utf8mb4; 2SET FOREIGN_KEY_CHECKS = 0; 3-- ---------------------------- 4-- Table structure for t_user 5-- ---------------------------- 6DROP TABLE IF EXISTS `t_user`; 7CREATE TABLE `t_user` ( 8 `id` int NOT NULL AUTO_INCREMENT, 9 `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名', 10 `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码', 11 `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名', 12 `age` int NULL DEFAULT NULL COMMENT '年龄', 13 `balance` decimal(10, 0) NULL DEFAULT NULL COMMENT '账户余额', 14 `db` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据库', 15 PRIMARY KEY (`id`) USING BTREE 16) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; 17 18-- ---------------------------- 19-- Records of t_user 20-- ---------------------------- 21INSERT INTO `t_user` VALUES (1, 'account1', NULL, '张三', 20, 100, '数据库1'); 22INSERT INTO `t_user` VALUES (2, 'account2', NULL, '李四', 28, 180, '数据库1'); 23 24SET FOREIGN_KEY_CHECKS = 1;

使用到的Maven依赖

1 <dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-openfeign</artifactId> 4 </dependency>

启动类

1@SpringBootApplication 2@EnableFeignClients //添加feign的启动注解 3public class HomeworkStudentFeignApplication { 4 public static void main(String[] args) { 5 SpringApplication.run(HomeworkStudentFeignApplication.class, args); 6 } 7} 8

编写通过feign进行调用应用的处理接口

1@Service 2@FeignClient(name = "HOMEWORK-PRODUCT") 3public interface UserFeignClient { 4 5 @GetMapping("/get/{id}") 6 UserEntity getUser(@PathVariable("id") String id); 7 8}

注意点:如果报异常说UserFeignClient的Bean未注册或这未找到,此处的 @Service 注解最好是加上。看了很多博客说将 spring-cloud-starter-openfeign 换成spring-cloud-openfeign-core ,我试了未能解决,所以又改回来了。解决的办法,就是加上@Service注解,删除之前的已经编译的文件,重启了IDEA。

二、Feign的日志打印

在yml中配置全局的日志输出级别

1 logging: 2 level: 3 com.demo.student.service.feign.UserFeignClient: DEBUG

可以对feign的日志输出级别,连接超时时间重定义

1 feign: 2 client: 3 config: 4 default: 5 connectTimeout: 5000 6 readTimeout: 5000 7 loggerLevel: full 8 encoder: feign.form.spring.SpringFormEncoder 9 compression: 10 request: 11 enabled: true 12 response: 13 enabled: true

更详细的参数信息请查看(FeignClientConfiguration类) 当查询时会在控制台中打印出相应的日志信息 image

三、Feign的自定义配置

首先需要修改feign的契约为其默认的契约

1@Configuration 2public class FeignConfig { 3 @Bean 4 public Contract feignContract(){ 5 return new Contract.Default(); 6 } 7}

在feign的嗲用接口处指定加载契约组件

1@Service 2@FeignClient(name = "HOMEWORK-PRODUCT",configuration = {FeignConfig.class, FeignLogConfig.class}) 3public interface UserFeignClient { 4 5 @RequestLine("GET /get/{id}") 6 UserEntity getUser(@Param("id") String id); 7}

注:此处需要使用RequestLine注解,并在里面指定请求方式是GET 还是POST,对于传递的参数,需要@Param进行标注。

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Spring Cloud Feign 异常处理

问题最近在项目开发中,使用Feign调用服务,当触发熔断机制时,遇到了以下问题:异常信息形如:TestServiceaddRecord(ParamVO)failedandnofallbackavailable.;获取不到服务提供方抛出的原始异常信息;实现某些业务方法不进入熔断,直接往外抛出异常;

Netty 实现简单的RPC远程调用

RPC又称远程过程调用,我们所知的远程调用分为两种,现在在服务间通信的方式也太多已这两种为主1.是基于HTTP的restful形式的广义远程调用,以springboot的feign和restTemplate为代表,由于采用的协议是HTTP的7层调用协议,并且协议的参数和响应序列化基本以JSON格式和XML格式为主。2.是基于TCP的狭义的RPC远程调

Feign请求响应结果被截取com.fasterxml.jackson.core.io.JsonEOFException

在生产环境使用feign调用外部接口时,偶尔会出现下面错误2020101511:00:18,535ERRORcom.shein.abc.rmp.controller.RecExplainConfigControllerrec_explain_query.failffeign.codec.DecodeExc

SpringCloud Alibaba微服务实战二十

!(https://oscimg.oschina.net/oscnet/d8c498ec1a794ad3ac37338f40db0851.png)在之前的项目中我们已经实现了使用Feign调用远程接口,本章内容主要是借助sentinel实现Feign接口熔断器功能。概述首先我们看看不使用熔断器的情况下调用一个没有启动的服务会出现