有没有办法在不使用Ruby的情况下手动启动Sidekiq进程,但是将相应的消息发布到Redis中?对于它所期望的消息,必须有某种约定。
答案 0 :(得分:8)
常见问题解答已涵盖此问题:https://github.com/mperham/sidekiq/wiki/FAQ#how-do-i-push-a-job-to-sidekiq-without-ruby
答案 1 :(得分:1)
不确定为什么要这样做,但是从文档来看:" 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来排队,而不是乱砍它?
编辑:您是否尝试在技术之间进行互操作?答案 2 :(得分:0)
Redis对Ruby或Sidekiq一无所知。
所以是的,这是可能的。它可能需要一些工作,你可能不得不考虑非公开的版本(好吧,它毕竟是开源的,所以任何东西都是公开的) API。
您可以使用任何编程语言编写单独的客户端进程,并分析redis密钥空间。阅读Sidekiq序列化的实现。快速浏览(我不使用Sidekiq)显示它使用简单的JSON序列化:sidekiq/api.rb。
希望这有帮助,TW