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

红烧土豆泥
• 阅读 1021

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

数据库表信息

  SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int NULL DEFAULT NULL COMMENT '年龄',
  `balance` decimal(10, 0) NULL DEFAULT NULL COMMENT '账户余额',
  `db` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据库',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES (1, 'account1', NULL, '张三', 20, 100, '数据库1');
INSERT INTO `t_user` VALUES (2, 'account2', NULL, '李四', 28, 180, '数据库1');

SET FOREIGN_KEY_CHECKS = 1;

使用到的Maven依赖

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

启动类

@SpringBootApplication
@EnableFeignClients  //添加feign的启动注解
public class HomeworkStudentFeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(HomeworkStudentFeignApplication.class, args);
    }
}

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

@Service
@FeignClient(name = "HOMEWORK-PRODUCT")
public interface UserFeignClient {

    @GetMapping("/get/{id}")
    UserEntity getUser(@PathVariable("id") String id);

}

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

二、Feign的日志打印

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

  logging:
    level:
      com.demo.student.service.feign.UserFeignClient: DEBUG

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

 feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000
        loggerLevel: full
        encoder: feign.form.spring.SpringFormEncoder
  compression:
    request:
      enabled: true
    response:
      enabled: true

更详细的参数信息请查看(FeignClientConfiguration类) 当查询时会在控制台中打印出相应的日志信息 记录SpringBoot集成Feign以及所遇到的坑

三、Feign的自定义配置

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

@Configuration
public class FeignConfig {
    @Bean
    public Contract feignContract(){
        return new Contract.Default();
    }
}

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

@Service
@FeignClient(name = "HOMEWORK-PRODUCT",configuration = {FeignConfig.class, FeignLogConfig.class})
public interface UserFeignClient {

    @RequestLine("GET /get/{id}")
    UserEntity getUser(@Param("id") String id);
}

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

点赞
收藏
评论区
推荐文章
待兔 待兔
2星期前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
2年前
springcloud(八) Hystrix监控
一、Feign项目Hystrix自带的监控  在feign项目pom.xml添加:<!1,使用Hystrix的模块hystrixmetricseventstream,就可将这些监控的指标信息以text/eventstream的格式暴露给外部系统。spring
Stella981 Stella981
2年前
Spring Cloud Feign 异常处理
问题最近在项目开发中,使用Feign调用服务,当触发熔断机制时,遇到了以下问题:异常信息形如:TestServiceaddRecord(ParamVO)failedandnofallbackavailable.;获取不到服务提供方抛出的原始异常信息;实现某些业务方法不进入熔断,直接往外抛出异常;
Stella981 Stella981
2年前
Netty 实现简单的RPC远程调用
RPC又称远程过程调用,我们所知的远程调用分为两种,现在在服务间通信的方式也太多已这两种为主1.是基于HTTP的restful形式的广义远程调用,以springboot的feign和restTemplate为代表,由于采用的协议是HTTP的7层调用协议,并且协议的参数和响应序列化基本以JSON格式和XML格式为主。2.是基于TCP的狭义的RPC远程调
Stella981 Stella981
2年前
Feign请求响应结果被截取com.fasterxml.jackson.core.io.JsonEOFException
在生产环境使用feign调用外部接口时,偶尔会出现下面错误2020101511:00:18,535ERRORcom.shein.abc.rmp.controller.RecExplainConfigControllerrec_explain_query.failffeign.codec.DecodeExc
Easter79 Easter79
2年前
SpringCloud Alibaba微服务实战二十
!(https://oscimg.oschina.net/oscnet/d8c498ec1a794ad3ac37338f40db0851.png)在之前的项目中我们已经实现了使用Feign调用远程接口,本章内容主要是借助sentinel实现Feign接口熔断器功能。概述首先我们看看不使用熔断器的情况下调用一个没有启动的服务会出现
Easter79 Easter79
2年前
SpringCloud常用组件
springcloud中有五大核心组件Eureka、Ribbon、Feign、Hystrix、Zuul,简单记录如下。Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。EurekaClient组件专门负责将服务的信息注册到EurekaServer中,而EurekaServer是一个注册中心,里面有一个注册表,保存了各服务所在
Easter79 Easter79
2年前
SpringCloud(第 016 篇)电影微服务,定制Feign,一个Feign功能禁用Hystrix,另一个Feign功能启用Hystrix
SpringCloud(第016篇)电影微服务,定制Feign,一个Feign功能禁用Hystrix,另一个Feign功能启用Hystrix一、大致介绍1、在一些场景中,部分功能需
Stella981 Stella981
2年前
OpenJDK11与Spring Cloud Finchley的不兼容问题与解决
本文的环境:OpenJDK11.0.4,SpringCloudfinchleySR4,SpringBoot2.0.3最近遇到了一个问题,在feign调用的时候,时常会出现这样一个奇怪的错误:2019100708:00:00.620ERRORxxx,e1ba4c7540954aa3,871b99c4576d42e3
Stella981 Stella981
2年前
Spring Cloud微服务架构从入门到会用(三)—服务间调用Feign
微服务最重要的一个功能是服务间调用,各个服务互相依赖。比如电商系统有订单服务,有库存服务。在我们购买一件商品的时候,需要生成订单和减库存。这里我们就要用到服务间调用Feign。Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。接下来我们新建两个modu