【问题标题】:Simple scalable work/message queue with delay具有延迟的简单可扩展工作/消息队列
【发布时间】:2010-03-02 15:07:20
【问题描述】:

我需要设置一个作业/消息队列,其中包含为任务设置延迟的选项,以便空闲工作人员不会立即接收它,而是在一定时间后(可能因任务而异)。我研究了几个 linux 队列解决方案(rabbitmq、gearman、memcacheq),但似乎没有一个提供开箱即用的功能。

关于如何实现这一目标的任何想法?

谢谢!

【问题讨论】:

    标签: message-queue rabbitmq gearman beanstalkd


    【解决方案1】:

    我使用 BeanstalkD 效果很好,在插入新作业时使用延迟选项等待几秒钟,直到该项目可供保留。

    如果您正在执行较长时间的延迟(例如 30 秒以上),或者任务执行起来有些重要(尽管稍后),那么它还有一个二进制日志记录系统,因此任何守护进程崩溃仍然会有记录的工作。也就是说,我已经通过 Beanstalkd 实例放置了数十万个实时作业,而我编写的工作人员总是比服务器更成问题。

    【讨论】:

    • 感谢您的反馈,过去几天我一直在研究 beanstalkd,它看起来很棒。你说得对,工人逻辑和管理很棘手:)
    【解决方案2】:

    您可以使用 AMQP 代理(例如 RabbitMQ),而我有一个“代理”(例如使用 pyton-amqplib 构建的 python 进程),它位于交换器上并拦截特定消息(特定 routing_key);计时器结束后,使用不同的routing_key 在 Exchange 上发回消息。

    我意识到这意味着“翻译/映射”routing keys 但它有效。使用 RabbitMQ 和 python-amqplib 非常简单。

    【讨论】:

    • 我想过这个问题,但是如果等待的代理在等待计时器结束时被杀死,则消息永远不会被添加到队列中。也许我可以通过第二个永久队列和一个具有多个内部计时器的代理来解决这个问题。不过,这似乎是一个丑陋的解决方法。
    • 好吧,处理这种故障模式是游戏的一部分。如果您要求的功能在 AMQP Brokers 中成为主流,我会感到惊讶,因为它违背了主要目标:最小化延迟。
    • 感谢您的回复。我觉得可以试试beantalkd,好像还可以,支持我说的“延迟”。
    猜你喜欢
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多