#php #node.js #laravel #nestjs #bull-queue
#php #node.js #laravel #nestjs #bull-queue
Вопрос:
Я реализовал Bull queue в проекте nestjs, но хочу, чтобы producer был проектом laravel. Я использую следующую команду для создания
Redis::command('zadd', ['bull:test:delayed', 1, $data]);
и при использовании потребителем
@Processor('test')
export class ConsumerProcessor {
@Process({concurrency:13})
handle(j: Job<unknown>) {
this.logger.log(j.id);
}
}
Данные $, добавленные в producer, доступны через job.id , как я могу получить к нему доступ с помощью job.data и иметь уникальный идентификатор? Какие изменения необходимо внести на стороне производителя?
Комментарии:
1. Вам это удалось? Я пытаюсь реализовать аналогичное решение
2. Кто-нибудь из вас, ребята, нашел приемлемое решение?
Ответ №1:
Приведенный ниже код работает:
A="some unique identifier";
Redis::command("hmset",['bull:<queuename>:<A>', "data" , json_encode($data)]);
Redis::command('zadd', ['bull:<queuename>:delayed', 1, A]);
Комментарии:
1. Нужно ли мне сначала получить последний идентификатор (для использования его в качестве идентификатора)? Действительно ли задержка правильная, куда следует добавить идентификатор? Или это не должна быть очередь ожидания?
2. В моем случае я использовал UUId для идентификатора, поэтому выборка не требовалась. Кроме того, мне пришлось отложить постановку в очередь, поэтому я добавил ее в delayed. Этот хак работает для моего варианта использования.
Ответ №2:
Я использовал https://github.com/HackThisSite/PHP-Bull-Scheduler для добавления заданий (работает только с Predis)
Также пробовал https://github.com/ilzrv/php-bull-queue сегодня, чтобы получить поддержку phpredis (требуется php7.4 )
Комментарии:
1. Похоже, этот пакет был создан 2 месяца спустя в ноябре ’20.