接上篇《微服务实战spring cloud alibaba(七)简单实现微服务之间的openfeign远程调用》,上篇我们简单的实现了一下openfeign的远程调用,但是我们也说过,这个是不能直接应用到生产环境的,这篇文章我们就来完善下openfeign,使其可以应用在生产环境下。
一、添加依赖
在u-common项目中,我们添加hystrix的依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
二、添加配置
添加配置之前,我们要熟悉下,目前是user-service通过openfeign调用goods-service,所以我们要在user-service上进行配置。也就是在发起端的微服务上进行调用。
在user-service的resources下面的application.yml里面添加配置。
2.1、添加服务调用超时的配置:
#feign的配置,连接超时及读取超时配置 feign: client: config: default: connectTimeout: 5000 readTimeout: 5000
因为是服务与服务之间的调用,如果远程服务出现异常,我们这里的远程调用是不能直接卡死的,不然调用发起端程序也会跟着崩溃,所以我们要配置下超时的时间。
2.2、配置熔断
上面2.1我们配置了超时,那么超时的话,我们应该怎么办呢?肯定是服务降级,熔断,因为不能让远程调用者被卡死了,所以需要配置
hystrix: enabled: true
2.3、配置http
很多刚接触openfeign的同学甚至还有很多经常使用openfeign的同学经常会忽略掉的是openfeign默认使用的是httpurlconnection,这里是不包含连接池的。我们接触java的程序员来说,各种线程池,连接池什么的都听过很多次了,为什么要用池呢?其实就是最大化资源利用,提前预热提高效率等。所以这里我们需要更改openfeign的调用方式,可以改成okhttp或者httpclient,这里推荐使用okhttp。
okhttp: enabled: true
2.4、配置压缩,提高效率
我们了解,在生产上的nginx配置的时候,我们一定会开启zip压缩,因为在http里面开启了zip压缩之后,服务与服务之间调用的数据包就会减少,网络传输就会更快。openfeign这里也是使用的http连接,一样的道理,也可以开启zip压缩。
compression: request: #请求 enabled: true #开启 mime-types: text/xml,application/xml,application/json #开启支持压缩的MIME TYPE min-request-size: 2048 #配置压缩数据大小的下限 response: #响应 enabled: true #开启响应GZIP压缩
2.5、开启日志
开启日志调用,方便查看
feign: client: config: default: loggerLevel: basic
以上所有的配置合集是:
#feign的配置,连接超时及读取超时配置 feign: client: config: default: connectTimeout: 5000 readTimeout: 5000 loggerLevel: basic okhttp: enabled: true hystrix: enabled: true compression: request: #请求 enabled: true #开启 mime-types: text/xml,application/xml,application/json #开启支持压缩的MIME TYPE min-request-size: 2048 #配置压缩数据大小的下限 response: #响应 enabled: true #开启响应GZIP压缩
三、使用
3.1、添加熔断的方法
在u-common项目里面创建一个GoodsFeignClientFallBack.java类,这个类需要集成自GoodsFeignClient.java。这个类的主要目的是如果openfeign调用过程中,如果远程服务出现异常等信息,我们需要服务降级,自动返回一个降级的信息。这里只是测试,所以我们如果出现服务调用异常,那么直接库存返回0。
package com.umall.common.feigns.fallback; import org.springframework.stereotype.Component; import com.umall.common.feigns.GoodsFeignClient; @Component public class GoodsFeignClientFallBack implements GoodsFeignClient{ @Override public Integer getBusinessGoodStock(Integer goodId) { return 0; } }
3.2、配置fallback
在GoodsFeignClient.java添加降级熔断方法
@FeignClient(value = "goods-service",fallback = GoodsFeignClientFallBack.class)
四、测试
4.1、首先我们测试熔断降级,所以这里我们只启动user-service,不启动goods-service。按照目前的情况,是不是应该服务调不通goods-service?访http://localhost:9001/user/good/1 看看
看到了吧,调用不通,库存返回了0,然后我们再把goods-service启动起来,再继续访问http://localhost:9001/user/good/1
返回了正确的库存12。
好了openfeign相关的配置我们就介绍到这里。最后总结一下:
1、需要配置openfeign的调用超时时间 2、需要配置openfeign的降级信息 3、需要更改openfeign调用的http 4、需要配置openfeign的压缩
本项目代码下载:点击下载
还没有评论,来说两句吧...