Как прервать конкретную задачу в бычьей очереди?

В соответствии с этим пакетом https://github.com/OptimalBits/bull возможно ли прервать определенная задача в "очереди ожидания"? Мой вариант использования выглядит следующим образом:

У меня есть коллекция mongodb «пользователи» и коллекция «дружба», где я храню имя и аватар обоих пользователей. Поэтому мне нужен только один запрос, чтобы получить список друзей определенного пользователя. Когда пользователь меняет свой аватар, я должен обновить все документы этого пользователя в коллекции «Дружба». Это некритичная к производительности операция, поскольку я хочу, чтобы она выполнялась в фоновом режиме, а последовательность не важна для этого варианта использования. Но когда пользователь обновляет свой аватар несколько раз за короткий промежуток времени, я хочу отменить все ссылающиеся на старые задачи (для обновления коллекции дружбы), кроме самых новых. Это с быком возможно?

Заранее спасибо, буду признателен за любую информацию по этому поводу.


person BestPractice2Go    schedule 29.11.2017    source источник


Ответы (1)


Глядя на ссылку Bull, вы обнаружите, что есть метод Job.remove(). Поскольку вы не разместили никакого кода, я мог только догадываться, как он выглядит. Поэтому я описал, что вы можете сделать.

Однако вам нужно сохранить Promise<Job>, который будет возвращен Queue.add(), например, в файле Map<string, Map<string, Promise<Job>>. Строка будет _id вашего пользователя, а Promise<Job>[] — это массив, содержащий все задания в очереди для конкретного пользователя. Как только задание будет выполнено (вы можете дождаться выполнения задания с помощью Job.finished()), вам необходимо удалить обещание с вашей карты.

Всякий раз, когда пользователь меняет свой аватар, вы можете заглянуть в свою карту, если вам нужно удалить какие-либо задания. Значение в вышеупомянутой карте — это другая карта (ключ — это строка, представляющая JobId), которая позволяет легко удалять задания по JobId. Это может показаться немного сложным, но не бойтесь — если вы понимаете, как работают Карты, это не должно быть проблемой :-).

person kentor    schedule 29.11.2017
comment
@kentor, вы можете ответить на этот вопрос stackoverflow.com /вопросы/56256609/ ? - person Kannan T; 22.05.2019