Perl的异步消息队列

时间:2014-08-11 15:40:51

标签: perl asynchronous enterprise

有人可以推荐一个适用于Perl的异步消息队列。

我并不感兴趣它是纯粹是用perl编写的,如果它是用其他东西编写的(c二进制等)并且只有一个perl客户端就没问题。

我正在寻找的一些指导方针: - 轻量级,资源不太重。 - 最少量的依赖(我不想为了让它运行而安装大量的库)。 - 它需要适合企业使用,并有一个社区+文档,我可以得到支持。

  • 要设置一些上下文,我正在通知Catalyst应用程序中的许多人,我很谨慎从应用程序一次发送太多电子邮件,因此将使用异步队列来处理电子邮件发送,并且希望不会减慢用户体验。

2 个答案:

答案 0 :(得分:2)

对于类似的事情(入队,流程,发送电子邮件),我正在使用IPC::DirQueue

我之所以选择它是因为:

  • 它使用原子文件操作,因此不需要数据库
  • 可以有多个排队流程
  • 和多个出队过程(在同一个类似FIFO的队列上)

简单入队脚本

use 5.014;
use warnings;
use IPC::DirQueue;

my $dq = IPC::DirQueue->new({ dir => "./qq" });
foreach my $n (1..10) {
    $dq->enqueue_string("some string $n");
}

和简单的出队

use 5.014;
use warnings;
use IPC::DirQueue;
use Path::Tiny;

my $dq = IPC::DirQueue->new({ dir => "./qq" });
while(my $job = $dq->wait_for_queued_job(0, 2) ) {
    my $content = path($job->get_data_path())->slurp; 
    say $content;
    $job->finish();
}

类似的模块是Directory::Queue

通常......你的里程...... :)也许一些更有经验的perl开发人员会建议你一个更好的解决方案。

答案 1 :(得分:2)

您可以将Gearman用于消息队列;然后,您可以使用Net::Async::Gearman完全异步地与它进行对话,既可以作为客户端(提交作业),也可以作为工作者(执行它们)。