When setting the fallbackUri to APIs not in shenyu-bootstrap, like https://example.com, it will not redirect to the target endpint. As well as for other registered APIs like APIs in http-example module.
e.g.
will return 404.
Expected Behavior
redirect to the fallbackUri as set in admin. like https://example.com.
Steps To Reproduce
go to admin, enable resilience4j, and set proper config. below is an example.
call an API which will return 400 status.
after calling many times, it will trigger circuit breaker and return 404.
Environment
ShenYu version(s): current master branch (2.4.3-SNAPSHOT)
Debug logs
2022-02-25 13:00:54 [boundedElastic-1] WARN org.apache.shenyu.common.utils.JsonUtils - write to json string error: org.apache.shenyu.plugin.api.result.DefaultShenyuEntity@6de86571
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Direct self-reference leading to cycle (through reference chain: org.apache.shenyu.plugin.api.result.DefaultShenyuEntity["data"]->org.springframework.web.server.ResponseStatusException["mostSpecificCause"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter._handleSelfReference(BeanPropertyWriter.java:944)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:721)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:722)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:166)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:722)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:166)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:4094)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3404)
at org.apache.shenyu.common.utils.JsonUtils.toJson(JsonUtils.java:85)
at org.apache.shenyu.plugin.api.result.ShenyuResult.format(ShenyuResult.java:58)
at org.apache.shenyu.plugin.api.utils.WebFluxResultUtils.result(WebFluxResultUtils.java:58)
at org.apache.shenyu.web.handler.GlobalErrorHandler.handle(GlobalErrorHandler.java:59)
at org.springframework.web.server.handler.ExceptionHandlingWebHandler.lambda$handle$0(ExceptionHandlingWebHandler.java:77)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:88)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:100)
at reactor.core.publisher.Operators.error(Operators.java:182)
at reactor.core.publisher.MonoError.subscribe(MonoError.java:52)
at reactor.core.publisher.Mono.subscribe(Mono.java:4105)
Is there an existing issue for this?
Current Behavior
When setting the
fallbackUri
to APIs not inshenyu-bootstrap
, likehttps://example.com
, it will not redirect to the target endpint. As well as for other registered APIs like APIs inhttp-example
module. e.g.will return 404.
Expected Behavior
redirect to the fallbackUri as set in
admin
. likehttps://example.com
.Steps To Reproduce
go to admin, enable
resilience4j
, and set proper config. below is an example.call an API which will return
400
status.after calling many times, it will trigger
circuit breaker
and return404
.Environment
Debug logs
Anything else?
Related code.
https://github.com/apache/incubator-shenyu/blob/2603db2df10448c836933e7711a5c4daae28d087/shenyu-plugin/shenyu-plugin-resilience4j/src/main/java/org/apache/shenyu/plugin/resilience4j/executor/Executor.java#L64
If it's a bug, I can fix it. Thanks~