工作线程和使用多个消息队列软件?好主意?

时间:2016-04-15 20:39:32

标签: ruby-on-rails multithreading

问题:我有一个程序会对文件进行大量的后处理,然后再发送一个Web服务进行更多处理。我的设计是否有气味,这是“解决问题”的正确方法

  1. Rails接受文件并启动resque_job以执行工作
  2. resque作业将通过REST将工作发送到另一个Web服务集群(非常慢......更多工作)&&将要监视的任务放在Rabbit MQ中的monitor_queue中以完成。 Resque作业不会等待另一个web服务来完成任务。它退出
  3. 我的设计中有一些气味问题,也许是可能被误导的肠道反应?

    • 拥有两个消息队列是一个好的设计。理性的是Rabbit_MQ有一个用于创建worker_queues的内置方法(它们甚至提供示例代码)。 Resque_Job使用redis,似乎是使用Rails“延迟工作”的可接受方法。
    • 我喜欢RabbitMQ:它具有循环任务能力(因此所有威胁都有任务),并保证在没有消息确认的情况下不会从队列中删除工作。
    • Resque似乎是在Rails中启动delayed_jobs的主要建议解决方案。

    跟进:在进行轮询时,我正在考虑一个简单的worker_queue,它只是通过单独的工作人员来遍历整个队列'最有意义吗?你同意吗。

1 个答案:

答案 0 :(得分:0)

我不认为这是一个糟糕的设计。它是一种面向服务的体系结构,即使你有单独的排队系统,它们也是完全独立的应用程序,只能通过特定的接口进行通信,这有一些优点和缺点。但是我不太明白使用RabbitMQ的原因。此外,很多新应用似乎都在使用Sidekiq;恕我直言,它在各种方面都优于Resque。