文章目录
1.前言
在上个文章的gateway中为基础进行集成,feign是个伪rpc框架使用的是http协议
2.引入pom文件
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${feign.version}</version>
</dependency>
3.新建service
- feignClient注解有两个参数,name为你要将请求转到哪个服务是个String的字符串上图只是用了一个类存储了final服务name,fallbackFactory是熔断时要使用哪个处理类
- 图中的方法要和处理服务的方法完全保持一致,如果参数是基本数据类型则需要加@RequestParam注解要是类则需要加ResponseBody注解
4.增加熔断处理类
实现FallbackFactory,然后返回一个上一步的service,如何处理可以在返回的实现类中进行处理
5.增加配置
feign:
hystrix:
enabled: true
6.出现的问题
部分错误栈和截图:
feign.codec.DecodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:182) ~[feign-core-10.4.0.jar:na]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ HTTP GET "/system/test/system" [ExceptionHandlingWebHandler]
Stack trace:
at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:182) ~[feign-core-10.4.0.jar:na]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:142) ~[feign-core-10.4.0.jar:na]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:80) ~[feign-core-10.4.0.jar:na]
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) ~[feign-core-10.4.0.jar:na]
at com.sun.proxy.$Proxy81.getSystemById(Unknown Source) ~[na:na]
at com.hz.gateway.filter.GatewayFilter.filter(GatewayFilter.java:36) ~[classes/:na]
at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:138) ~[spring-cloud-gateway-core-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.lambda$filter$0(FilteringWebHandler.java:118) ~[spring-cloud-gateway-core-2.2.0.RELEASE.jar:2.2.0.RELEASE]
解决的办法:
@Bean
@ConditionalOnMissingBean
public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {
return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));
}