Spring Cloud(2020.0.3) | 从入门到入土 - 11. OpenFeign 超时机制

今天来说一下超时机制,我们通过模拟真实环境,使用 OpenFeign 进行远程调用集群服务。

一、创建商品模块集群

我们再来创建两个商品模块,让商品模块构建出一个小的集群。

模块名称:microservice-commodity-provider-1002,microservice-commodity-provider-1003

里面的 pom、代码都是一样的,直接复制即可,唯独 yml 要修改一下端口,还有 eureka 的 instance-id,其他的都正常复制。

二、修改商品模块业务代码

我们这里是给业务代码中添加一些识别信息,不然我们都不知道调用的是那个节点。

三、测试

启动 Eureka Server 集群,再启动刚刚的商品模块集群,最后启动订单模块。我们再来创建一个订单。

Eureka Server 已经注册了三个服务节点,现在我们去创建订单。

 

在多次点击的过程中,我们可以看到,这些节点是可以正常提供服务。现在我们将整个商品模块集群全部进行下线(模仿宕机~~),然后再来请求。

可以看到,订单模块报异常了。(但这种超时我们是没有办法进行管理的)

四、OpenFeign 超时机制

我们在其中一个商品模块中增加一段代码,让线程休眠 5 秒

@GetMapping("/getCommodityPrice/{id}")
	public BigDecimal getCommodityPrice(@PathVariable(value = "id") String id) {
		try {
			// 线程睡眠 5 秒
			Thread.sleep(5000);
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("这是 1000 端口的节点提供的服务");
		return commodityService.getCommodityPrice(id);
	}

这时候我们再调用这个商品模块,来看看效果~~~

虽然请求时间长,但是,也是可以成功的。

我们现在来思考一个问题,如果这个请求长达 10 ~ 20 秒,一旦并发量突然增高,就会引发雪崩(后面我们会具体讲解服务雪崩),为了对应这样的问题,我们可以通过配置超时时间来进行限制。

多说一句,一般我们实际业务也是不可能这样的,10 ~ 20 秒的请求太久了,业务一般会要求响应时间不超过几秒。

五、配置 OpenFeign 超时机制

我们在订单模块中进行配置超时机制

yml

feign: 
  client:
    config:
      default: # 这里就是指的所有被加载的默认FeignClient实现的服务配置都生效
        connectTimeout: 1000
        readTimeout: 2000

connectTimeout 是指连接超时时间,如果超过 1 秒,就表示超时了。(无默认值)

readTimeout 是指从连接建立时开始计算,返回的时间超过 2 秒就表示超时了。(无默认值)

配置好之后,我们重新启动订单服务,然后再来请求一下

可以看到,这里是直接异常,因为我们设置的是 2 秒的返回时间,但是因为我们设置了 5 秒的线程休眠,导致我们数据返回不回来,最后直接异常。


这一讲就讲到这里,有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人网站:https://www.lemon1234.com

最近网站已经做好,并且已经上线,欢迎各位留言~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值