krakenD版本:2.2.1go版本:目标1.19.3
我想使用krakenD的顺序功能向两个不同的端点发送顺序请求。
简单总结一下我的案例:
- 这两个服务可以返回成功(200)和错误(4**)。
- 如果第一个服务返回错误,我可以在Postman中看到错误作为响应。(这是我想要的情况)
- 如果在第一个服务返回成功(200)之后,第二个服务返回错误(4**),我会在等待第二个服务返回错误时看到postman的成功响应。
连续终点示例:
{
"endpoint": "/companies/validate",
"method": "GET",
{{ include "input_headers.txt" }},
"backend": [
{
"host": ["{{ .service.credential_service_url }}"],
"url_pattern": "/tokens/validate",
"method": "GET",
"extra_config": {
"backend/http": {
"return_error_code": true
}
}
},
{
"host": ["{{ .service.company_service_url }}"],
"url_pattern": "/companies/{resp0_companyId}/validate",
"method": "GET",
"extra_config": {
"backend/http": {
"return_error_code": true
}
}
}
],
"extra_config": {
"proxy": {
"sequential": true
}
}
}
ide logs
postman response
正如您所看到的,第一个服务工作正常,第二个服务返回错误,但 Postman 响应返回成功。
1条答案
按热度按时间pgky5nke1#
这是KrakenD的预期行为。
当您执行多个调用时,如果至少有一个请求成功,KrakenD将返回任何可用的内容以及200状态代码。但作为交换,您会收到一个标头
X-KrakenD-Complete: false
,告诉您某些操作失败。您可以在此处阅读有关聚合的更多信息当您使用顺序代理时,当第一个请求失败时,没有其他事情可做,因为下一个顺序调用会自动中止。因此,所有内容都失败,KrakenD无法返回任何内容,这就是为什么您会获得所需的失败。
在另一种情况下,由于第一个调用起作用,KrakenD有一些东西要返回,您将收到部分数据。
您应该检查X-KrakenD-Complete头的客户端内容以决定要做什么