Perl 设置「;“完成”;Mojolicious/Minion::Job上的事件
我正在尝试让仆从乔布斯在完成后反馈给Mojolicious web应用程序(可能是通过向API发布消息)。这里的基本思想是web应用程序将反馈给已上载/启动作业的客户端 我尝试过这样做:Perl 设置「;“完成”;Mojolicious/Minion::Job上的事件,perl,mojolicious,Perl,Mojolicious,我正在尝试让仆从乔布斯在完成后反馈给Mojolicious web应用程序(可能是通过向API发布消息)。这里的基本思想是web应用程序将反馈给已上载/启动作业的客户端 我尝试过这样做: get '/' => sub { my $c = shift; my $id = $c->minion->enqueue('thing', [ qw/a b 1/, { foo => 'bar' } ]); my $job = $c->minion->
get '/' => sub {
my $c = shift;
my $id = $c->minion->enqueue('thing', [ qw/a b 1/, { foo => 'bar' } ]);
my $job = $c->minion->job($id);
$job->on(finish => sub ($job) {
my $id = $job->id;
my $task = $job->task;
$job->app->log->info(qq{Job "$id" was performed with task "$task"});
});
$c->render(template => 'index');
};
这不起作用-我猜是因为事件只在执行作业的进程中发出,并且事件不会被序列化和排队
如果我这样做:
app->minion->add_task
(thing => sub ($job, $c, $sub, @args) {
$job->on(finish => sub ($job) {
my $id = $job->id;
my $task = $job->task;
$job->app->log->info(qq{Job "$id" was performed with task "$task"});
});
sleep 2;
});
它工作正常,但这意味着我必须将事件处理添加到每个任务中,这会增加代码的复杂性
有没有办法避免这样做
我在想:
Minion::Job::WithFeedback
)$c->minion->enqueue('thing',[qw/ab1/,{foo=>'bar'}],{roles=>qw/+WithFeedback+WithTimeout/);
Minion::Admin
插件所做的-但我想看看是否有其他方式不需要轮询数据库
这是可能的吗?当我们这样做的时候,这本身就是一个坏主意吗