Ruby 通过Redis手动启动Sidekiq作业

Ruby 通过Redis手动启动Sidekiq作业,ruby,redis,sidekiq,Ruby,Redis,Sidekiq,有没有一种方法可以不用Ruby手动启动Sidekiq进程,而是将适当的消息发布到Redis中?对于它所期望的消息,必须有某种约定。不确定为什么要这样做,但从其文档中可以看出:“Sidekiq与Resque兼容。它使用与Resque完全相同的消息格式,因此可以集成到现有的Resque处理场中。”我知道Resque将数据散列成字符串: "{\"class\":\"NoOpWorker\",\"args\":[]}" 您可以通过以下方式在控制台将作业排队来手动验证这一点: Resque.enqueu

有没有一种方法可以不用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序列化:


希望这有帮助,TW

常见问题解答中已经介绍了这一点:

+1获取Lance的答案。我不知道Resque的兼容性。对于python,有两种方法。同意Lance的观点:你为什么要这么做……原因是我有一个Grails应用程序需要在同一个框中调用Ruby应用程序,我认为执行Sidekiq异步调用要比只使用命令行调用应用程序干净得多。另外,谢谢你的回答!向你点头,反对这种方法的理由是,如果Sidekiq改变了他们的消息格式,你升级到最新版本,你的系统就会崩溃。如果你通过ruby代码和他们的公共API进行排队,你就不会有这种系统脆弱性。我想我太专注于wiki页面了,没有想到去看FAQ。谢谢你的帮助!