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
старые карты)