有没有办法将消息推送到异步代理中的两个后端



(作为上下文,我使用RabbitMQ作为消息代理,由KrakenD集成。API使用Nestjs。(

我知道KrakenD中的异步代理可以将消耗的数据推送到多个后端:

KrakenD在收到新消息时联系已定义的后端列表并传递事件数据。

但是,在此处传递两个不同的后端会导致记录器指示两个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"
}
}
}
}
],

希望我能收到任何关于这方面的建议。谢谢

您可以将单个异步代理连接到多个后端,但KrakenD不支持分布式事务,因此每个管道不允许超过一个非安全后端请求(如RFC 2616第9节所定义(。从文档中(https://www.krakend.io/docs/backends/):

即使您可以在一个端点中使用多个后端,KrakenD也不允许您定义多个非安全(写(后端。这是一个(有时有争议的(设计决定,禁用网关来处理事务。

如果需要将写入方法(POST、PUT、DELETE、PATCH(与其他GET方法一起使用,请使用顺序代理,并在序列末尾最多放置1个写入方法。

如果要发送第二个非安全请求,可以使用http_response助手添加一个最小的lua片段(https://www.krakend.io/docs/endpoints/lua/#making-additional-requests-http_response(如下:

{
"extra_config": {
"modifier/lua-proxy": {
"pre": "local r = request.load(); http_response.new('http://127.0.0.1:3200/newOrderNotification', "POST", r:body())"
}
}
}

最新更新