Go语言 KrakenD序贯终点错误响应

8xiog9wr  于 2023-04-03  发布在  Go
关注(0)|答案(1)|浏览(156)

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 响应返回成功。

pgky5nke

pgky5nke1#

这是KrakenD的预期行为。
当您执行多个调用时,如果至少有一个请求成功,KrakenD将返回任何可用的内容以及200状态代码。但作为交换,您会收到一个标头X-KrakenD-Complete: false,告诉您某些操作失败。您可以在此处阅读有关聚合的更多信息
当您使用顺序代理时,当第一个请求失败时,没有其他事情可做,因为下一个顺序调用会自动中止。因此,所有内容都失败,KrakenD无法返回任何内容,这就是为什么您会获得所需的失败。
在另一种情况下,由于第一个调用起作用,KrakenD有一些东西要返回,您将收到部分数据。
您应该检查X-KrakenD-Complete头的客户端内容以决定要做什么

相关问题