(As上下文,我使用RabbitMQ作为消息代理,由KrakenD集成。API使用Nestjs。)
我知道KrakenD中的异步代理可以将使用的数据推送到多个后端:
KrakenD联系定义的后端列表,在新消息出现时传递事件数据。
然而,在这里传递两个不同的后端会导致logger为两个API指示一个context exceeded
。如果我只在列表中放入一个后端,它会返回预期的结果。
下面是工作代码:
"backend": [
{
"url_pattern": "/newOrder",
"method": "POST",
"host": [ "http://127.0.0.1:3300" ],
"disable_host_sanitize": false,
"extra_config": {
"modifier/martian": {
"header.Modifier": {
"scope": [
"request"
],
"name": "Content-Type",
"value": "application/json"
}
}
}
},
{
"url_pattern": "/newOrderNotification",
"method": "POST",
"host": [ "http://127.0.0.1:3200" ],
"disable_host_sanitize": false,
"extra_config": {
"modifier/martian": {
"header.Modifier": {
"scope": [
"request"
],
"name": "Content-Type",
"value": "application/json"
}
}
}
}
],
希望我能得到任何建议。谢谢!
1条答案
按热度按时间ndh0cuux1#
您可以将一个异步代理连接到多个后端,但KrakenD不支持分布式事务,因此每个管道不允许超过一个非安全后端请求(如RFC 2616第9节所定义)。
即使你可以在一个端点上使用多个后端,KrakenD也不允许你定义多个非安全(写)后端。这是一个(有时有争议的)设计决策,旨在禁用网关处理事务。
如果您需要一个写方法(POST、PUT、DELETE、PATCH)和其他GET方法,请使用顺序代理,并在序列末尾放置最多1个写方法。
如果你想发送一个次要的非安全请求,你可以使用
http_response
帮助器(https://www.krakend.io/docs/endpoints/lua/# making-additional-requests-http_response)添加一个最小的lua代码片段,如下所示: