【问题标题】:Manually launch a Sidekiq job through Redis通过 Redis 手动启动 Sidekiq 作业
【发布时间】:2014-06-03 11:40:21
【问题描述】:

有没有办法在不使用 Ruby 的情况下手动启动 Sidekiq 进程,而是通过将适当的消息发布到 Redis 中?它所期望的消息必须有某种约定。

【问题讨论】:

    标签: ruby redis sidekiq


    【解决方案1】:

    【讨论】:

    • 我想我太专注于 wiki 页面,并没有考虑查看常见问题解答。感谢您的帮助!
    【解决方案2】:

    不确定您为什么要这样做,但从其文档中可以看出:“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 将作业排入队列,而不是绕过它?

    编辑:您是否尝试在技术之间进行互操作?

    【讨论】:

    • 原因是我有一个 Grails 应用程序需要在同一个盒子上调用一个 Ruby 应用程序,而且我认为执行 Sidekiq 异步调用比使用命令调用应用程序要干净得多 -线。另外,谢谢您的回答!
    • nods 由你决定,反对这种方法的论点是,如果 Sidekiq 改变了他们的消息格式并且你升级到最新版本,你的系统就会崩溃。如果您通过 ruby​​ 代码及其公共 API 进行入队,您将不会有这种系统脆弱性。
    【解决方案3】:

    Redis 对 Ruby 或 Sidekiq 一无所知。

    所以是的,这是可能的。这可能需要一些工作,并且您可能需要考虑非公共 的版本控制(嗯,它毕竟是开源的,所以任何东西都是公共的) API。

    您可以使用任何编程语言编写单独的客户端进程,并分析 redis 键空间。阅读 Sidekiq 序列化的实现。快速浏览(我不使用 Sidekiq)发现它使用简单的 JSON 序列化:sidekiq/api.rb

    希望这会有所帮助,TW

    【讨论】:

    • +1 表示兰斯的回答。我不知道 Resque 的兼容性。对于 python,有pyres。同意 Lance 的观点:你为什么想要这样做...
    猜你喜欢
    • 2015-04-27
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多