Sentinel Circuit breaking was not triggered with Spring WebFlux and reactive WebClient

9rygscc1  于 2021-11-29  发布在  Java
关注(0)|答案(20)|浏览(397)

Issue Description

Type: bug report or feature request

Describe what happened (or what feature you want)

SphU.asyncEntry 接口无法block

Describe what you expected to happen

我写了个服务接口,delay 1秒

使用如下的方法测试,资源设置50ms超时,时间窗口2秒

日志显示
没有请求block,所有请求都成功到达后端

How to reproduce it (as minimally and precisely as possible)

  1. 写一个缓慢的服务端,我采用delay 1秒模拟
  2. 使用webflux webclient 请求服务,订阅里close AsyncEntry
  3. 循环调用多次,我测试是调用100次

Tell us your environment

jdk 14, kotlin 1.3.71, win 10 64 bit

Anything else we need to know?

bmp9r5qi

bmp9r5qi1#

可否给个 demo 工程,社区来复现下

wlp8pajw

wlp8pajw2#

问题复现了么?昨天线上发生重大故障,外部的接口很慢,导致服务受到较大影响

t40tm48m

t40tm48m3#

感觉每次换个姿势,结果都不同,现在服务器上使用的同步的方式,经常爆释放context的异常

xjreopfe

xjreopfe4#

测试5使用协程在withcontext里异步调用二个接口,前面几个请求成功,后面全失败

fcwjkofz

fcwjkofz5#

测试4没有使用协程,使用reactor,使用订阅来关闭context,前面成功,中间一部分熔断,后续请求都成功,请看sentinel-demo-clienttest4.log

5rgfhyps

5rgfhyps6#

测试3使用异步方式调用了一个接口,前面几个成功外,其它调用全熔断了

z4bn682m

z4bn682m7#

测试2 删除了第三个请求,二个请求在withContext里异步执行, 绝大多数请求都被熔断了

quhf5bfb

quhf5bfb8#

测试前先把web跑起来,bootRun
然后执行测试,一共写了5个测试,每个测试熔断策略都一致,分别跑500次
测试1,2使用sentinel同步api
测试3,4,5使用异步api

测试 1调用了三个接口,2个接口使用withContext异步调用,一个接口异步调用,出现少量熔断,大部分请求都通过,出现部分下列错误

jv2fixgn

jv2fixgn10#

好的,我等下把项目地址写在下面

vqlkdk9b

vqlkdk9b11#

你接口的延时时间太长了,你试试60ms,并且你每个请求间sleep 5ms 试试。

7fyelxc5

7fyelxc512#

异步版本的上面有描述,不会触发

von4xj4u

von4xj4u13#

目前使用kotlin协程,同步方法一直报错

gev0vcfq

gev0vcfq14#

有什么问题 错误 具体描述下。

bjg7j2ky

bjg7j2ky15#

可以先提供一个版本的么,同步的或异步的都行,可以手工传入context
目前同步可以熔断,但是因为协程thread local出问题,导致一直狂刷错误日志
异步目前根本不能熔断

相关问题