简体   繁体   中英

Is there a way to push the message to two backends in the async agent?

(As context, I am using RabbitMQ as the message broker, integrated by KrakenD. The APIs are using Nestjs.)

I understand that the async agent in KrakenD can push the data consumed to multiple backends:

KrakenD contacts the defined backend(s) list passing the event data when a new message kicks in.

However, passing two different backends here result to logger indicating a context exceeded for both of the APIs. If I just put a single backend in the list, it returns what's expected.

Here's the working code:

"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"
          }
        }
      }
    }
  ],

Hope I can receive any advice on this. Thanks!

You can connect a single async agent to several backends but KrakenD does not support distributed transactions, so no more than one non-safe backend request (as defined at RFC 2616, section 9) is allowed per pipe. From the documentation ( https://www.krakend.io/docs/backends/ ):

Even though you can use several backends in one endpoint, KrakenD does not allow you to define multiple non-safe (write) backends. This is a (sometimes controversial) design decision to disable the gateway to handle transactions.

If you need to have a write method (POST, PUT, DELETE, PATCH) together with other GET methods, use the sequential proxy and place a maximum of 1 write method at the end of the sequence.

If you want to send a secondary non-safe request, you can add a minimal lua snippet using the http_response helper ( https://www.krakend.io/docs/endpoints/lua/#making-additional-requests-http_response ) just like this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM