【发布时间】:2014-06-03 11:40:21
【问题描述】:
有没有办法在不使用 Ruby 的情况下手动启动 Sidekiq 进程,而是通过将适当的消息发布到 Redis 中?它所期望的消息必须有某种约定。
【问题讨论】:
有没有办法在不使用 Ruby 的情况下手动启动 Sidekiq 进程,而是通过将适当的消息发布到 Redis 中?它所期望的消息必须有某种约定。
【问题讨论】:
【讨论】:
不确定您为什么要这样做,但从其文档中可以看出:“Sidekiq 与 Resque 兼容。它使用与 Resque 完全相同的消息格式,因此它可以集成到现有的 Resque 处理场中。”我知道 Resque 将数据哈希作为字符串排入队列:
"{\"class\":\"NoOpWorker\",\"args\":[]}"
您可以通过在控制台中将作业排入队列来手动验证这一点:
Resque.enqueue_to "foo", NoOpWorker
然后用 redis-cli 命令查看数据是什么
redis-cli lrange resque:queue:foo 0 100
但在继续之前,您为什么要这样做?为什么不直接运行脚本或 rake 任务,通过 Sidekiq 的普通 API 将作业排入队列,而不是绕过它?
编辑:您是否尝试在技术之间进行互操作?
【讨论】:
Redis 对 Ruby 或 Sidekiq 一无所知。
所以是的,这是可能的。这可能需要一些工作,并且您可能需要考虑非公共 的版本控制(嗯,它毕竟是开源的,所以任何东西都是公共的) API。
您可以使用任何编程语言编写单独的客户端进程,并分析 redis 键空间。阅读 Sidekiq 序列化的实现。快速浏览(我不使用 Sidekiq)发现它使用简单的 JSON 序列化:sidekiq/api.rb。
希望这会有所帮助,TW
【讨论】: