将 RabbitMQ 与运行多线程作业的工作人员一起使用 - Parallel Gem

Posted

技术标签:

【中文标题】将 RabbitMQ 与运行多线程作业的工作人员一起使用 - Parallel Gem【英文标题】:Using RabbitMQ with workers that run multithreaded jobs - Parallel Gem 【发布时间】:2012-05-01 18:26:07 【问题描述】:

我正在用 ruby​​(rabbitmq,parallel gem)构建一个系统,它需要一个作业列表,在 rabbit 中将它们排队,然后让工作人员从队列中弹出作业以执行它们。

很容易让工作人员在准备好后从队列中弹出一个作业,但我希望每个工作人员运行 5 个线程,这样当所有 5 个线程都在处理时,该工作人员不会弹出任何工作离开队列。当一个线程空闲时,worker 从队列中接受一个作业。

使用 Parallel gem,我看到创建多线程进程的唯一方法是使用以下代码。

results = Parallel.map(array, :in_processes => MAX_PROCESSES) do |item|
 item.process
end

我想做类似的事情

while true
 cur_threads = Parallel.get_cur_threads
 if cur_threads < MAX_PROCESSES
  # get another job from queue
  # allocate a thread for the job
end

有什么想法吗??

【问题讨论】:

【参考方案1】:

我知道这已经很老了,但我认为使用 work_queue gem 可能会得到你想要的东西。

【讨论】:

以上是关于将 RabbitMQ 与运行多线程作业的工作人员一起使用 - Parallel Gem的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMq之工作队列(轮询发送消息)

OO博客作业2:第5-7周作业总结

04-RabbitMQ-Work Queues&&消息应答&&持久化&&不公平分发

Spark-java 多线程与运行单个 Spark 作业

长时间运行的任务与线程——性能

何时使用 - 延迟作业与 RabbitMQ