【发布时间】:2013-01-22 09:31:18
【问题描述】:
下午好,
我有两个独立但相关的应用程序。它们都应该有自己的后台队列(阅读:单独的 Sidekiq 和 Redis 进程)。但是,我希望偶尔能够将作业从app1 推送到app2 的队列中。
从简单的队列/推送角度来看,如果app1 没有现有的 Sidekiq/Redis 堆栈,则很容易做到这一点:
# In a process, far far away
# Configure client
Sidekiq.configure_client do |config|
config.redis = { :url => 'redis://redis.example.com:7372/12', :namespace => 'mynamespace' }
end
# Push jobs without class definition
Sidekiq::Client.push('class' => 'Example::Workers::Trace', 'args' => ['hello!'])
# Push jobs overriding default's
Sidekiq::Client.push('queue' => 'example', 'retry' => 3, 'class' => 'Example::Workers::Trace', 'args' => ['hello!'])
但是,考虑到我已经从 app1 调用了 Sidekiq.configure_client 和 Sidekiq.configure_server,可能在这之间需要发生一些事情。
显然,我可以直接从 Sidekiq 内部获取序列化和规范化代码,然后手动推送到 app2 的 redis 队列,但这似乎是一个脆弱的解决方案。我希望能够使用Client.push 功能。
我想我理想的解决方案是这样的:
SidekiqTWO.configure_client { remote connection..... }
SidekiqTWO::Client.push(job....)
甚至:
$redis_remote = remote_connection.....
Sidekiq::Client.push(job, $redis_remote)
显然有点滑稽,但这是我的理想用例。
谢谢!
【问题讨论】:
-
我为此提供 200 点赏金——我对此更感兴趣,因为允许一个 sidekiq 客户端将消息“循环”到两个不同的 redis 实例中高可用性和故障转移。
标签: ruby-on-rails redis queue sidekiq