微服务框架搭建(feign远程调用)

496 阅读1分钟

文章目录

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

github地址

github地址

参考文献

cloud.spring.io/spring-clou…