Проблемы с ответом Orion RequestEntityTooLarge - PullRequest
0 голосов
/ 13 июня 2018

Я недавно задавал вопрос относительно огромного количества соединений одновременно, и одно из предложений, которое я получил, было то, что я должен использовать операции BATCH.Спасибо за это, это очень помогло.

Ссылка на тему

Теперь у меня странная ситуация, я знаю, что означает ошибка и что ее вызывает, но я понятия не имеюкак это происходит в моем случае.

Итак, у меня есть 2000 сущностей, я разделил их на 500 кусков (я знаю, что могу разделить на 1000 или даже чуть больше, но сейчас я придерживаюсь 500)

* 1010Затем я перехожу к созданию их в 4 пакетных операции, что значительно улучшило мою предыдущую логику открытия 2000 соединений.Я использую библиотеку обещаний запросов для этих операций, и они успешно созданы, но здесь все становится странным.

Даже если они успешно созданы, мое обещание запроса возвращает эту ошибку,

{
    "name": "StatusCodeError",
    "statusCode": 413,
    "message": "413 - {\"error\":\"RequestEntityTooLarge\",\"description\":\"payload size: 1487638, max size supported: 1048576\"}",
    "error": {
        "error": "RequestEntityTooLarge",
        "description": "payload size: 1487638, max size supported: 1048576"
    },
    "options": {
        "method": "POST",
        "headers": {
            "Content-Type": "application/json",
            "Fiware-Service": "waste4think",
            "Fiware-ServicePath": "/deusto/w4t/zamudio/test"
        },
        "uri": "http://localhost:1026/v2/op/update?options=keyValues",
        "body": {
            "actionType": "UPDATE",
            "entities": [ 2000 entities ]},
        "json": true,
        "simple": true,
        "resolveWithFullResponse": false,
        "transform2xxOnly": false
    },
    "response": {
        "statusCode": 413,
        "body": {
            "error": "RequestEntityTooLarge",
            "description": "payload size: 1487638, max size supported: 1048576"
        },
        "headers": {
            "connection": "close",
            "content-length": "100",
            "content-type": "application/json",
            "fiware-correlator": "48689168-6ef7-11e8-a270-0242ac110003",
            "date": "Wed, 13 Jun 2018 10:48:18 GMT"
        },
        "request": {
            "uri": {
                "protocol": "http:",
                "slashes": true,
                "auth": null,
                "host": "localhost:1026",
                "port": "1026",
                "hostname": "localhost",
                "hash": null,
                "search": "?options=keyValues",
                "query": "options=keyValues",
                "pathname": "/v2/op/update",
                "path": "/v2/op/update?options=keyValues",
                "href": "http://localhost:1026/v2/op/update?options=keyValues"
            },
            "method": "POST",
            "headers": {
                "Content-Type": "application/json",
                "Fiware-Service": "waste4think",
                "Fiware-ServicePath": "/deusto/w4t/zamudio/test",
                "accept": "application/json",
                "content-length": 1487638
            }
        }
    }
}

Iконсольный журнал моего потока

Sending: 0 500
Sending: 1 500
Sending: 2 500
Sending: 3 500
Sending: 4 134
[ undefined, undefined, undefined, undefined, undefined ]

Как вы можете видеть, он начинается с первого, второго пакета и т. д. Не определено здесь, это не проблема, так как пакет возвращает только 204 в случае успеха, и я консольный журнал вместо кода ...

Но после того, как окончательный пакет завершен, я получаю эту ошибку (сущности создаются).

Как вы можете видеть, это показывает ошибку, как если бы я поместил все сущности в один огромный пакет с неверно,также эта вещь показана, даже мои сущности успешно созданы.Теперь, что мне здесь не хватает и почему Орион должен вернуть этот ответ, но приступить к созданию сущностей в мелкосерийном режиме нормально?

Любое предложение поможет.

Спасибо

1 Ответ

0 голосов
/ 13 июня 2018

Я думаю, что проблема в том, о чем вам говорит Орион:

"payload size: 1487638, max size supported: 1048576"

Таким образом, вы отправляете 1487638 байт полезной нагрузки в вашем POST /v2/op/update, тогда как Орион позволяет 1 МБ целых, как описано в документации .

Если предположить, что 500 сущностей занимают 1487638 (в среднем), то 250 должны занимать половину, около ~ 700000 байтов.Учитывая, что ~ 700000 байтов меньше 1 МБ, этого должно быть достаточно.На самом деле, кажется, что в последней партии 134 объекта (<250 объектов), поэтому, вероятно, один из них был правильно обработан Orion. </p>

Подход, обычно используемый в логике клиента в этом случае, заключается в использовании какого-либо аккумуляторав вашем коде (например, массив JSON).Вы можете реализовать цикл для заполнения массива, накапливая размер каждого объекта.Когда вы приближаетесь к пределу (например, 800 КБ), вы отправляете пакет, сбрасываете массив и начинаете со следующего.

...