spring boot 项目使用Feign

什么是Feign

Feign是一个声明式、模板化的HTTP客户端,它简化了使用Spring Cloud服务的客户端开发。在微服务架构中,服务与服务之间的调用是通过HTTP RESTful API进行的。Feign提供了一种默认的方式来实现服务之间的调用,使得客户端的调用变得更加简单、优雅、可读性更好。

服务提供者API

  1. 引入依赖 在pom.xml中添加如下依赖:

<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-okhttp</artifactId><version>10.2.0</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.3.RELEASE</version></dependency>
  1. 创建Feign Client的API 创建一个Java接口,使用@FeignClient注解来指定服务提供者的名称。

@FeignClient(name = "feign-provider", value = "feign-provider", path = "/provider",url= "${feign-provider.url}")publicinterfaceFeignClientApi{

    @GetMapping("/hello")
    String sayHello();

}
  1. 打包Feign Client的API提供给服务消费者使用

服务消费者

  1. 引入依赖 在pom.xml中添加如下依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.3.RELEASE</version></dependency><dependency><groupId>com.fudai.spring.feign</groupId><artifactId>provider-api</artifactId></dependency>
  1. 属性配置

  • 配置超时时间

feign.client.config.default.connectTimeout=5000
feign.client.config.default.readTimeout=5000
  • 配置Feign Client的API服务提供者地址

feign-provider.url=127.0.0.1:8081
  1. 引入ServiceProviderClient依赖 在需要调用服务的类中,使用@Autowired注解来注入Feign Client,并直接调用其中的方法。

@Service@Slf4j
public class BizService {

    @Autowired
    private FeignClientApi feignClientApi;

    publicvoidprocess() {
        log.info("process 结果:{}", feignClientApi.sayHello());
    }
}
  1. springboot启动类中加入feign注解@EnableFeignClients

@SpringBootApplication(
        scanBasePackages = {"com.fudai.spring.feign.consumer.*"})
@EnableFeignClients(basePackages = {"com.fudai.spring.feign.provider.api"})
public class Bootstrap {
    publicstaticvoidmain(String[] args) {
        SpringApplication.run(Bootstrap.class, args);
    }
}

demo地址

https://github.com/fudai/feign-demo

使用中遇到的问题

问题描述:
使用multipart/form-data格式上传文件,报错: {"code":1,"error":"Content type 'multipart/form-data;boundary=r7J8EqF60I35iHU6qNbNnns8coGDoGuVA1s;charset=UTF-8' not supported","data":null,"success":false}
问题原因:
Feign默认情况下只支持Content-Type为application/x-www-form-urlencoded和application/json格式的请求,不支持Content-Type为multipart/form-data的请求。
解决方案:
使用Feign发送multipart/form-data格式的请求,需要使用Feign的multipart/form-data支持。
方案1: 如果请求参数是对象,对象中有List<MultipartFile>,可以在方法中使用注解: @Headers("Content-Type:multipart/form-data")
样例如下:
@PostMapping(value = "/testMultipart2", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)@Headers("Content-Type:multipart/form-data")
String testMultipart2(MultipartRequest request);

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class MultipartRequest{
    private List<MultipartFile> files;
}
方案2:
如果请求参数直接是List<MultipartFile>对象,可以使用注解: @RequestPart("files")
修饰请求MultipartFile对象
样例如下:
@PostMapping(value = "/testMultipart1", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
String testMultipart1(@RequestPart("files") List<MultipartFile> files);
方案1和方案2都需要@PostMapping注解上加上属性: consumes = MediaType.MULTIPART_FORM_DATA_VALUE 如果请求参数直接是单个MultipartFile对象或者 请求参数是对象,对象中有单个MultipartFile。只需要在@PostMapping注解上加上属性
样例如下:
@PostMapping(value = "/testMultipart3", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
String testMultipart3(MultipartFile file);

@PostMapping(value = "/testMultipart4", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
String testMultipart4(SingleMultipartRequest request);

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class SingleMultipartRequest{
    privateMultipartFilefile;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot Feign是一个基于HTTP的轻量级Java库,用于简化使用HTTP客户端进行远程过程调用(RPC)的开发。它提供了一种简单的方式来定义和使用基于接口的HTTP客户端。 在Spring Boot Feign中,我们可以使用注解来定义一个HTTP客户端接口。通过在接口的方法上添加注解,我们可以指定用于发送HTTP请求的URL、请求方法、请求参数、请求头等信息。Feign会根据这些注解的配置,自动生成具体的HTTP请求。 与传统的RPC相比,Spring Boot Feign具有以下优点: 1. 简化开发:使用Feign,我们可以将HTTP请求的细节抽象成接口方法,无需手动处理HTTP请求、序列化和反序列化等操作,开发起来更加简单快捷。 2. 标准化接口:通过标准化接口的形式,我们可以更好地定义和管理服务间的通信协议,提高接口的重用性和可维护性。 3. 自动化配置:Spring Boot提供了自动化配置的支持,通过简单的配置,我们可以快速地将Feign集成到Spring Boot应用中。 4. 可扩展性:借助Spring的依赖注入和AOP等特性,我们可以很方便地实现自定义的拦截器、错误处理器和负载均衡等功能,提升系统的可扩展性。 总体而言,Spring Boot Feign是一个简单、灵活且功能强大的远程过程调用(RPC)工具,适用于构建微服务架构的应用程序。通过它,我们可以轻松地实现服务间的通信,提高系统的可维护性和扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值