Как определить последнее задание из указанной c, установленной в очереди? - PullRequest
0 голосов
/ 11 июля 2020

У меня есть очередь для всех заданий, которые использует воркер (bullmq), т.е. воркер обрабатывает элемент в очереди, когда приходит их очередь. Я добавляю n тестов в очередь указанной c группы (скажем, x) и жду, пока они будут обработаны моим рабочим. После того, как рабочий закончил обработку моей работы, я могу прослушивать completed события моей очереди ( функциональность bullmq ), чтобы узнать, какое задание завершено, а также получить их возвращаемые значения от рабочего. Мой вопрос: как определить, что завершенный тест в моем прослушивателе событий - это последний из указанной c группы.

Мой первоначальный подход заключался в том, чтобы сохранить количество неудачных и прошли тесты в Redis ("group_id:passed", "group_id:failed"), а затем проверьте в прослушивателе событий, суммируются ли два из них в общем количестве тестов. Но этот подход не сработал, потому что это условие запускалось для каждого теста

requestQueueEvents.on("completed", async (callback: any) => {
    const cli = await requestQueueEvents.client; // Reddis client
    const passedCountString = await cli.get(`${groupId}:passed`);
    const failedCountString = await cli.get(`${groupId}:failed`);
    if (parseInt(passedCountString ? passedCountString : "0") + parseInt(failedCountString ? failedCountString : "0") === testCount) {
        console.log("Last test of this groupId");
    }
}

Примечание: , что несколько рабочих процессов могут одновременно обрабатывать разные тесты одной и той же группы

Если у вас есть предложения или идеи по поводу другой архитектуры, которые могут помочь мне в этом, опубликуйте их ниже. Заранее спасибо

...