Perl Mojolicious minion->поставить в очередь с пользовательским идентификатором

По словам Миньона :

      my $id = $minion->enqueue(foo => [@args]);

Можно ли использовать собственный идентификатор? Например:

      my $id = Data::UUID->new->create_str;
$self->minion->enqueue(foo => [@args] => {id => $id});

ПодобноLinkCheckНапример, я не хочу, чтобы пользователи видели URL-адреса «других» пользователей какidлегко угадать.

1 ответ

Не совсем. получает свой идентификатор отMinion::Backend::Pg::enqueue, который сам получает идентификатор, выполняя запрос на вставку SQL, который заканчивается наRETURNING id, что означает, что возвращаемый идентификатор — это идентификатор строки, вставленной в базу данных.


Вместо этого вы можете использовать хеш-сопоставление идентификаторов, возвращаемыхenqueueк GUID, сгенерированнымData::UUID. Что-то вроде:

      my $internal_id = $minion->enqueue(foo => [@args]);
my $external_id = Data::UUID->new->create_str;
$self->extern_to_intern_map{$external_id} = $internal_id;

(Обратите внимание, чтоextern_to_intern_mapбудет расти, не уменьшаясь; если ваше приложение работает в течение длительного времени, вы можете явно захотетьdeleteстарые карты)

Другие вопросы по тегам