Как избежать ошибок тайм-аута с большим объемом трафика к API? - PullRequest
0 голосов
/ 13 июня 2019

У меня установлен API в Node.JS с использованием Mongoose для подключения к MongoDB в Azure. При небольшом объеме вызовов API работает без ошибок и успешно сохраняет все данные. Однако, как только я увеличиваю трафик, я начинаю получать ошибки соединения TimeOut.

Я использую insertMany, поскольку каждая полезная нагрузка может иметь более одной записи, но полезная нагрузка не особенно велика. Я также увеличил пропускную способность Azure для коллекции, чтобы убедиться, что она может обрабатывать размер полезной нагрузки (до этого я делал ошибки из-за размера запроса).

Я пытался циклически перебирать данные для добавления в каждую запись один за другим вместо insertMany, но результаты его сохранения были непоследовательными (т. Е. Он не всегда сохранял бы все 3 в каждой полезной нагрузке), однако это не помогло кажется, чтобы избежать проблемы тайм-аута.

Это код для подключения MongoDB:

mongoose
    .connect(db_url, {
        useNewUrlParser: true
    }).then(() => {
        return next();
    })
    .catch(err => {
        res.status(500).send({
            status: 500,
            message: "Internal server error"
        });
        mongoose.connection.close();
    });


This is the code that is saving the data:

MODEL.insertMany(jsonData, function(err, results) {
    if (err) {
        console.error(err);
        res.status(500).send({
            status: 500,
            message: "Internal server error"
        });
    } else {
        res.status(200).send({
            status: 200,
            message: "Record(s) saved"
        });
    }
});

Вот ошибка, которую я получаю:

{ Error: connect ETIMEDOUT 
    at Object._errnoException (util.js:992:11)
    at _exceptionWithHostPort (util.js:1014:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1186:14)
  code: 'ETIMEDOUT',
  errno: 'ETIMEDOUT',
  syscall: 'connect',
  address: '',
  port: }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...