Как отправить данные из laravel в очередь redis, реализованную с использованием Bull queue

#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.