我有两个生产AWS实例,它们将运行resque但是正在侦听不同的队列。以下是我当前配置的示例:
配置/部署/生产/ prod_resque_1.rb
server "<ip>", :web, :app, :resque_worker, :db, primary: true
set :resque_log_file, "log/resque.log"
set :resque_environment_task, true
set :workers, {
"queue1" => 5,
"*" => 2
}
after "deploy:restart", "resque:restart"
配置/部署/生产/ prod_resque_2.rb
server "<ip>", :web, :app, :resque_worker, :db, primary: true
set :resque_log_file, "log/resque.log"
set :resque_environment_task, true
set :workers, {
"queue2,queue3,queue4" => 5
}
after "deploy:restart", "resque:restart"
然后,我有一个&#34;全球&#34;配方:
load 'config/deploy/production/common'
load 'config/deploy/production/prod_resque_1'
load 'config/deploy/production/prod_resque_2'
显而易见的问题是,当我致电cap prod_resque resque:start
时,:workers
中的prod_resque_1
定义会被prod_resque_2
的加载覆盖,从而导致prod_resque_1
prod_resque_2
让工作人员只听queue2
,queue3
和queue4
。
我的工作一直是cap prod_resque_1 resque:start
然后cap prod_resque_2 resque:start
,但这种方式违背了卡皮斯特拉诺的目的。
有关更清洁解决方案的任何建议,允许我运行cap prod_resque resque:start
并拥有&#34;第一个&#34;服务器运行7个工作人员,5个听queue1
,2个听所有队列,&#34;秒&#34;服务器运行5名工作人员,只收听queue2
,queue3
和queue4
?
答案 0 :(得分:2)
在capistrano-resque docs中给出了一个示例:如果为每个服务器(或服务器组)分配不同的角色,则可以基于每个角色定义工作线程。
在你的情况下,你会做类似
的事情role :queue_one_workers, [ip_from_prod_resque_1]
role :other_queue_workers, [ip_from_prod_resque_2]
set :workers, {
:queue_one_workers => {"queue1" => 5, "*" => 2},
:other_queue_workers => {"queue2" => 5, "queue3" => 5, "queue4" => 5}
}